summaryrefslogtreecommitdiff
path: root/libnautilus-private
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-private')
-rw-r--r--libnautilus-private/Makefile.am30
-rw-r--r--libnautilus-private/egg-recent-item.c345
-rw-r--r--libnautilus-private/egg-recent-item.h77
-rw-r--r--libnautilus-private/egg-recent-model.c1752
-rw-r--r--libnautilus-private/egg-recent-model.h80
-rw-r--r--libnautilus-private/egg-recent-vfs-utils.c570
-rw-r--r--libnautilus-private/egg-recent-vfs-utils.h42
-rw-r--r--libnautilus-private/egg-screen-exec.c260
-rw-r--r--libnautilus-private/egg-screen-exec.h46
-rw-r--r--libnautilus-private/egg-screen-help.c487
-rw-r--r--libnautilus-private/egg-screen-help.h75
-rw-r--r--libnautilus-private/egg-screen-url.c183
-rw-r--r--libnautilus-private/egg-screen-url.h44
-rw-r--r--libnautilus-private/eggtreemultidnd.c414
-rw-r--r--libnautilus-private/eggtreemultidnd.h76
-rw-r--r--libnautilus-private/nautilus-program-chooser.c5
-rwxr-xr-xlibnautilus-private/update-from-egg.sh25
17 files changed, 4 insertions, 4507 deletions
diff --git a/libnautilus-private/Makefile.am b/libnautilus-private/Makefile.am
index db2e9c38b..5b1f3881a 100644
--- a/libnautilus-private/Makefile.am
+++ b/libnautilus-private/Makefile.am
@@ -5,6 +5,7 @@ lib_LTLIBRARIES=libnautilus-private.la
INCLUDES = \
-I$(top_srcdir) \
-I$(top_builddir) \
+ -I$(top_srcdir)/cut-n-paste-code \
$(CORE_CFLAGS) \
$(DISABLE_DEPRECATED_CFLAGS) \
-DDATADIR=\""$(datadir)"\" \
@@ -14,6 +15,7 @@ INCLUDES = \
dependency_static_libs = \
$(top_builddir)/cut-n-paste-code/widgets/gimphwrapbox/libgtkhwrapbox.la \
+ $(top_builddir)/cut-n-paste-code/libegg/libegg.la \
$(top_builddir)/libbackground/libbackground.la \
$(NULL)
@@ -35,28 +37,9 @@ marshal_sources = \
nautilus-marshal-guts.c \
$(NULL)
-EGG_SCREEN_FILES = \
- egg-screen-exec.h \
- egg-screen-exec.c \
- egg-screen-url.h \
- egg-screen-url.c \
- egg-screen-help.h \
- egg-screen-help.c \
- $(NULL)
-
-EGG_RECENT_FILES = \
- egg-recent-model.c \
- egg-recent-model.h \
- egg-recent-item.c \
- egg-recent-item.h \
- egg-recent-vfs-utils.c \
- egg-recent-vfs-utils.h \
- $(NULL)
libnautilus_private_la_SOURCES = \
$(nautilus_metafile_server_idl_sources) \
- eggtreemultidnd.c \
- eggtreemultidnd.h \
nautilus-audio-player.c \
nautilus-audio-player.h \
nautilus-authn-manager.c \
@@ -184,8 +167,6 @@ libnautilus_private_la_SOURCES = \
nautilus-view-identifier.h \
nautilus-volume-monitor.c \
nautilus-volume-monitor.h \
- $(EGG_SCREEN_FILES) \
- $(EGG_RECENT_FILES) \
$(NULL)
fsattributesdir = $(datadir)/nautilus
@@ -221,7 +202,6 @@ EXTRA_DIST = \
$(fsattributes_DATA) \
nautilus-metafile-server.idl \
nautilus-marshal.list \
- update-from-egg.sh \
$(schema_DATA) \
$(NULL)
@@ -234,9 +214,3 @@ CLEANFILES = \
dist-hook:
cd $(distdir); rm -f $(CLEANFILES)
-EGG_SCREEN_DIR = $(srcdir)/../../libegg/libegg/screen-exec
-EGG_RECENT_DIR = $(srcdir)/../../libegg/libegg/recent-files
-
-regenerate-built-sources:
- EGGFILES="$(EGG_SCREEN_FILES)" EGGDIR="$(EGG_SCREEN_DIR)" $(srcdir)/update-from-egg.sh
- EGGFILES="$(EGG_RECENT_FILES)" EGGDIR="$(EGG_RECENT_DIR)" $(srcdir)/update-from-egg.sh
diff --git a/libnautilus-private/egg-recent-item.c b/libnautilus-private/egg-recent-item.c
deleted file mode 100644
index 4b42aca75..000000000
--- a/libnautilus-private/egg-recent-item.c
+++ /dev/null
@@ -1,345 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- *
- * Authors:
- * James Willcox <jwillcox@cs.indiana.edu>
- */
-
-
-#include <stdio.h>
-#include <string.h>
-#include <glib.h>
-#include <libgnomevfs/gnome-vfs.h>
-#include <libgnomevfs/gnome-vfs-mime-utils.h>
-#include "egg-recent-item.h"
-#include "egg-recent-vfs-utils.h"
-
-
-
-EggRecentItem *
-egg_recent_item_new (void)
-{
- EggRecentItem *item;
-
- item = g_new (EggRecentItem, 1);
-
- item->groups = NULL;
- item->private = FALSE;
- item->uri = NULL;
- item->mime_type = NULL;
-
- item->refcount = 1;
-
- return item;
-}
-
-static void
-egg_recent_item_free (EggRecentItem *item)
-{
- if (item->uri)
- g_free (item->uri);
-
- if (item->mime_type)
- g_free (item->mime_type);
-
- if (item->groups) {
- g_list_foreach (item->groups, (GFunc)g_free, NULL);
- g_list_free (item->groups);
- item->groups = NULL;
- }
-
- g_free (item);
-}
-
-void
-egg_recent_item_ref (EggRecentItem *item)
-{
- item->refcount++;
-}
-
-void
-egg_recent_item_unref (EggRecentItem *item)
-{
- item->refcount--;
-
- if (item->refcount == 0) {
- egg_recent_item_free (item);
- }
-}
-
-
-EggRecentItem *
-egg_recent_item_new_from_uri (const gchar *uri)
-{
- EggRecentItem *item;
-
- g_return_val_if_fail (uri != NULL, NULL);
-
- item = egg_recent_item_new ();
-
- if (!egg_recent_item_set_uri (item ,uri)) {
- egg_recent_item_free (item);
- return NULL;
- }
-
- item->mime_type = gnome_vfs_get_mime_type (item->uri);
-
- if (!item->mime_type)
- item->mime_type = g_strdup (GNOME_VFS_MIME_TYPE_UNKNOWN);
-
- return item;
-}
-
-/*
-static GList *
-egg_recent_item_copy_groups (const GList *list)
-{
- GList *newlist = NULL;
-
- while (list) {
- gchar *group = (gchar *)list->data;
-
- newlist = g_list_prepend (newlist, g_strdup (group));
-
- list = list->next;
- }
-
- return newlist;
-}
-
-
-EggRecentItem *
-egg_recent_item_copy (const EggRecentItem *item)
-{
- EggRecentItem *newitem;
-
- newitem = egg_recent_item_new ();
- newitem->uri = g_strdup (item->uri);
- if (item->mime_type)
- newitem->mime_type = g_strdup (item->mime_type);
- newitem->timestamp = item->timestamp;
- newitem->private = item->private;
- newitem->groups = egg_recent_item_copy_groups (item->groups);
-
- return newitem;
-}
-*/
-
-/*
-EggRecentItem *
-egg_recent_item_new_valist (const gchar *uri, va_list args)
-{
- EggRecentItem *item;
- EggRecentArg arg;
- gchar *str1;
- gchar *str2;
- gboolean priv;
-
- item = egg_recent_item_new ();
-
- arg = va_arg (args, EggRecentArg);
-
- while (arg != EGG_RECENT_ARG_NONE) {
- switch (arg) {
- case EGG_RECENT_ARG_MIME_TYPE:
- str1 = va_arg (args, gchar*);
-
- egg_recent_item_set_mime_type (item, str1);
- break;
- case EGG_RECENT_ARG_GROUP:
- str1 = va_arg (args, gchar*);
-
- egg_recent_item_add_group (item, str1);
- break;
- case EGG_RECENT_ARG_PRIVATE:
- priv = va_arg (args, gboolean);
-
- egg_recent_item_set_private (item, priv);
- break;
- default:
- break;
- }
-
- arg = va_arg (args, EggRecentArg);
- }
-
- return item;
-}
-*/
-
-gboolean
-egg_recent_item_set_uri (EggRecentItem *item, const gchar *uri)
-{
- gchar *utf8_uri;
-
- /* if G_BROKEN_FILENAMES is not set, this should succede */
- if (g_utf8_validate (uri, -1, NULL)) {
- item->uri = egg_recent_vfs_make_uri_from_input (uri);
- } else {
- utf8_uri = g_filename_to_utf8 (uri, -1, NULL, NULL, NULL);
-
- if (utf8_uri == NULL) {
- g_warning ("Couldn't convert URI to UTF-8");
- return FALSE;
- }
-
- if (g_utf8_validate (utf8_uri, -1, NULL)) {
- item->uri = egg_recent_vfs_make_uri_from_input (utf8_uri);
- } else {
- g_free (utf8_uri);
- return FALSE;
- }
-
- g_free (utf8_uri);
- }
-
- return TRUE;
-}
-
-gchar *
-egg_recent_item_get_uri (const EggRecentItem *item)
-{
- return g_strdup (item->uri);
-}
-
-G_CONST_RETURN gchar *
-egg_recent_item_peek_uri (const EggRecentItem *item)
-{
- return item->uri;
-}
-
-gchar *
-egg_recent_item_get_uri_utf8 (const EggRecentItem *item)
-{
- /* this could fail, but it's not likely, since we've already done it
- * once in set_uri()
- */
- return g_filename_to_utf8 (item->uri, -1, NULL, NULL, NULL);
-}
-
-gchar *
-egg_recent_item_get_uri_for_display (const EggRecentItem *item)
-{
- return egg_recent_vfs_format_uri_for_display (item->uri);
-}
-
-void
-egg_recent_item_set_mime_type (EggRecentItem *item, const gchar *mime)
-{
- item->mime_type = g_strdup (mime);
-}
-
-gchar *
-egg_recent_item_get_mime_type (const EggRecentItem *item)
-{
- return g_strdup (item->mime_type);
-}
-
-void
-egg_recent_item_set_timestamp (EggRecentItem *item, time_t timestamp)
-{
- if (timestamp == (time_t) -1)
- time (&timestamp);
-
- item->timestamp = timestamp;
-}
-
-time_t
-egg_recent_item_get_timestamp (const EggRecentItem *item)
-{
- return item->timestamp;
-}
-
-G_CONST_RETURN GList *
-egg_recent_item_get_groups (const EggRecentItem *item)
-{
- return item->groups;
-}
-
-gboolean
-egg_recent_item_in_group (const EggRecentItem *item, const gchar *group_name)
-{
- GList *tmp;
-
- tmp = item->groups;
- while (tmp != NULL) {
- gchar *val = (gchar *)tmp->data;
-
- if (strcmp (group_name, val) == 0)
- return TRUE;
-
- tmp = tmp->next;
- }
-
- return FALSE;
-}
-
-void
-egg_recent_item_add_group (EggRecentItem *item, const gchar *group_name)
-{
- g_return_if_fail (group_name != NULL);
-
- if (!egg_recent_item_in_group (item, group_name))
- item->groups = g_list_append (item->groups, g_strdup (group_name));
-}
-
-void
-egg_recent_item_remove_group (EggRecentItem *item, const gchar *group_name)
-{
- GList *tmp;
-
- g_return_if_fail (group_name != NULL);
-
- tmp = item->groups;
- while (tmp != NULL) {
- gchar *val = (gchar *)tmp->data;
-
- if (strcmp (group_name, val) == 0) {
- item->groups = g_list_remove (item->groups,
- val);
- g_free (val);
- break;
- }
-
- tmp = tmp->next;
- }
-}
-
-void
-egg_recent_item_set_private (EggRecentItem *item, gboolean priv)
-{
- item->private = priv;
-}
-
-gboolean
-egg_recent_item_get_private (const EggRecentItem *item)
-{
- return item->private;
-}
-
-GType
-egg_recent_item_get_type (void)
-{
- static GType boxed_type = 0;
-
- if (!boxed_type) {
- boxed_type = g_boxed_type_register_static ("EggRecentItem",
- (GBoxedCopyFunc)egg_recent_item_ref,
- (GBoxedFreeFunc)egg_recent_item_unref);
- }
-
- return boxed_type;
-}
diff --git a/libnautilus-private/egg-recent-item.h b/libnautilus-private/egg-recent-item.h
deleted file mode 100644
index 74cb097a3..000000000
--- a/libnautilus-private/egg-recent-item.h
+++ /dev/null
@@ -1,77 +0,0 @@
-
-#ifndef __EGG_RECENT_ITEM_H__
-#define __EGG_RECENT_ITEM_H__
-
-#include <time.h>
-#include <glib.h>
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define EGG_TYPE_RECENT_ITEM (egg_recent_item_get_type ())
-
-#define EGG_RECENT_ITEM_LIST_UNREF(list) \
- g_list_foreach (list, (GFunc)egg_recent_item_unref, NULL); \
- g_list_free (list);
-
-typedef struct _EggRecentItem EggRecentItem;
-
-struct _EggRecentItem {
- /* do not access any of these directly */
- gchar *uri;
- gchar *mime_type;
- time_t timestamp;
-
- gboolean private;
-
- GList *groups;
-
- int refcount;
-};
-
-GType egg_recent_item_get_type (void) G_GNUC_CONST;
-
-/* constructors */
-EggRecentItem * egg_recent_item_new (void);
-
-void egg_recent_item_ref (EggRecentItem *item);
-void egg_recent_item_unref (EggRecentItem *item);
-
-/* automatically fetches the mime type, etc */
-EggRecentItem * egg_recent_item_new_from_uri (const gchar *uri);
-
-gboolean egg_recent_item_set_uri (EggRecentItem *item, const gchar *uri);
-gchar * egg_recent_item_get_uri (const EggRecentItem *item);
-gchar * egg_recent_item_get_uri_utf8 (const EggRecentItem *item);
-gchar * egg_recent_item_get_uri_for_display (const EggRecentItem *item);
-
-void egg_recent_item_set_mime_type (EggRecentItem *item, const gchar *mime);
-gchar * egg_recent_item_get_mime_type (const EggRecentItem *item);
-
-void egg_recent_item_set_timestamp (EggRecentItem *item, time_t timestamp);
-time_t egg_recent_item_get_timestamp (const EggRecentItem *item);
-
-G_CONST_RETURN gchar *egg_recent_item_peek_uri (const EggRecentItem *item);
-
-
-/* groups */
-G_CONST_RETURN GList * egg_recent_item_get_groups (const EggRecentItem *item);
-
-gboolean egg_recent_item_in_group (const EggRecentItem *item,
- const gchar *group_name);
-
-void egg_recent_item_add_group (EggRecentItem *item,
- const gchar *group_name);
-
-void egg_recent_item_remove_group (EggRecentItem *item,
- const gchar *group_name);
-
-void egg_recent_item_set_private (EggRecentItem *item,
- gboolean priv);
-
-gboolean egg_recent_item_get_private (const EggRecentItem *item);
-
-
-G_END_DECLS
-
-#endif /* __EGG_RECENT_ITEM_H__ */
diff --git a/libnautilus-private/egg-recent-model.c b/libnautilus-private/egg-recent-model.c
deleted file mode 100644
index a5637a8dc..000000000
--- a/libnautilus-private/egg-recent-model.c
+++ /dev/null
@@ -1,1752 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- *
- * Authors:
- * James Willcox <jwillcox@cs.indiana.edu>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/time.h>
-#include <time.h>
-#include <gtk/gtk.h>
-#include <libgnomevfs/gnome-vfs.h>
-#include <libgnomevfs/gnome-vfs-mime-utils.h>
-#include <gconf/gconf-client.h>
-#include "egg-recent-model.h"
-#include "egg-recent-item.h"
-#include "egg-recent-vfs-utils.h"
-
-#define EGG_RECENT_MODEL_FILE_PATH "/.recently-used"
-#define EGG_RECENT_MODEL_BUFFER_SIZE 8192
-
-#define EGG_RECENT_MODEL_MAX_ITEMS 500
-#define EGG_RECENT_MODEL_DEFAULT_LIMIT 10
-#define EGG_RECENT_MODEL_TIMEOUT_LENGTH 200
-
-#define EGG_RECENT_MODEL_KEY_DIR "/desktop/gnome/recent_files"
-#define EGG_RECENT_MODEL_DEFAULT_LIMIT_KEY EGG_RECENT_MODEL_KEY_DIR "/default_limit"
-#define EGG_RECENT_MODEL_EXPIRE_KEY EGG_RECENT_MODEL_KEY_DIR "/expire"
-
-struct _EggRecentModelPrivate {
- GSList *mime_filter_values; /* list of mime types we allow */
- GSList *group_filter_values; /* list of groups we allow */
- GSList *scheme_filter_values; /* list of URI schemes we allow */
-
- EggRecentModelSort sort_type; /* type of sorting to be done */
-
- int limit; /* soft limit for length of the list */
- int expire_days; /* number of days to hold an item */
-
- char *path; /* path to the file we store stuff in */
-
- GHashTable *monitors;
-
- GnomeVFSMonitorHandle *monitor;
-
- GConfClient *client;
- gboolean use_default_limit;
-
- guint limit_change_notify_id;
- guint expiration_change_notify_id;
-
- guint changed_timeout;
-};
-
-/* signals */
-enum {
- CHANGED,
- LAST_SIGNAL
-};
-
-static GType model_signals[LAST_SIGNAL] = { 0 };
-
-/* properties */
-enum {
- PROP_BOGUS,
- PROP_MIME_FILTERS,
- PROP_GROUP_FILTERS,
- PROP_SCHEME_FILTERS,
- PROP_SORT_TYPE,
- PROP_LIMIT
-};
-
-typedef struct {
- GSList *states;
- GList *items;
- EggRecentItem *current_item;
-}ParseInfo;
-
-typedef enum {
- STATE_START,
- STATE_RECENT_FILES,
- STATE_RECENT_ITEM,
- STATE_URI,
- STATE_MIME_TYPE,
- STATE_TIMESTAMP,
- STATE_PRIVATE,
- STATE_GROUPS,
- STATE_GROUP
-} ParseState;
-
-typedef struct _ChangedData {
- EggRecentModel *model;
- GList *list;
-}ChangedData;
-
-#define TAG_RECENT_FILES "RecentFiles"
-#define TAG_RECENT_ITEM "RecentItem"
-#define TAG_URI "URI"
-#define TAG_MIME_TYPE "Mime-Type"
-#define TAG_TIMESTAMP "Timestamp"
-#define TAG_PRIVATE "Private"
-#define TAG_GROUPS "Groups"
-#define TAG_GROUP "Group"
-
-static void start_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer user_data,
- GError **error);
-
-static void end_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- gpointer user_data,
- GError **error);
-
-static void text_handler (GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer user_data,
- GError **error);
-
-static void error_handler (GMarkupParseContext *context,
- GError *error,
- gpointer user_data);
-
-static GMarkupParser parser = {start_element_handler, end_element_handler,
- text_handler,
- NULL,
- error_handler};
-
-#if 0
-static void
-print_elapsed (struct timeval before, struct timeval after, const gchar *label)
-{
- gdouble elapsed;
-
- elapsed = after.tv_sec - before.tv_sec
- + (after.tv_usec - before.tv_usec) / 1000000.0;
-
- g_print ("%s: %f elapsed.\n", label, elapsed);
-}
-#endif
-
-static gboolean
-egg_recent_model_string_match (const GSList *list, const gchar *str)
-{
- const GSList *tmp;
-
- if (list == NULL || str == NULL)
- return TRUE;
-
- tmp = list;
-
- while (tmp) {
- if (g_pattern_match_string (tmp->data, str))
- return TRUE;
-
- tmp = tmp->next;
- }
-
- return FALSE;
-}
-
-static gboolean
-egg_recent_model_write_raw (EggRecentModel *model, FILE *file,
- const gchar *content)
-{
- int len;
- int fd;
- struct stat sbuf;
-
- rewind (file);
-
- len = strlen (content);
- fd = fileno (file);
-
- if (fstat (fd, &sbuf) < 0)
- g_warning ("Couldn't stat XML document.");
-
- if ((off_t)len < sbuf.st_size) {
- ftruncate (fd, len);
- }
-
- if (fputs (content, file) == EOF)
- return FALSE;
-
- fsync (fd);
- rewind (file);
-
- return TRUE;
-}
-
-static GList *
-egg_recent_model_delete_from_list (GList *list,
- const gchar *uri)
-{
- GList *tmp;
-
- if (!uri)
- return list;
-
- tmp = list;
-
- while (tmp) {
- EggRecentItem *item = tmp->data;
- GList *next;
-
- next = tmp->next;
-
- if (!strcmp (egg_recent_item_peek_uri (item), uri)) {
- egg_recent_item_unref (item);
-
- list = g_list_remove_link (list, tmp);
- g_list_free_1 (tmp);
- }
-
- tmp = next;
- }
-
- return list;
-}
-
-static void
-egg_recent_model_add_new_groups (EggRecentItem *item,
- EggRecentItem *upd_item)
-{
- const GList *tmp;
-
- tmp = egg_recent_item_get_groups (upd_item);
-
- while (tmp) {
- char *group = tmp->data;
-
- if (!egg_recent_item_in_group (item, group))
- egg_recent_item_add_group (item, group);
-
- tmp = tmp->next;
- }
-}
-
-static gboolean
-egg_recent_model_update_item (GList *items, EggRecentItem *upd_item)
-{
- GList *tmp;
- const char *uri;
-
- uri = egg_recent_item_peek_uri (upd_item);
-
- tmp = items;
-
- while (tmp) {
- EggRecentItem *item = tmp->data;
-
- if (egg_recent_vfs_uris_match (egg_recent_item_peek_uri (item), uri)) {
- egg_recent_item_set_timestamp (item, (time_t) -1);
-
- egg_recent_model_add_new_groups (item, upd_item);
-
- return TRUE;
- }
-
- tmp = tmp->next;
- }
-
- return FALSE;
-}
-
-static gchar *
-egg_recent_model_read_raw (EggRecentModel *model, FILE *file)
-{
- GString *string;
- char buf[EGG_RECENT_MODEL_BUFFER_SIZE];
-
- rewind (file);
-
- string = g_string_new ("");
- while (fgets (buf, EGG_RECENT_MODEL_BUFFER_SIZE, file)) {
- string = g_string_append (string, buf);
- }
-
- rewind (file);
-
- return g_string_free (string, FALSE);
-}
-
-
-
-static void
-parse_info_init (ParseInfo *info)
-{
- info->states = g_slist_prepend (NULL, STATE_START);
- info->items = NULL;
-}
-
-static void
-parse_info_free (ParseInfo *info)
-{
- g_slist_free (info->states);
-}
-
-static void
-push_state (ParseInfo *info,
- ParseState state)
-{
- info->states = g_slist_prepend (info->states, GINT_TO_POINTER (state));
-}
-
-static void
-pop_state (ParseInfo *info)
-{
- g_return_if_fail (info->states != NULL);
-
- info->states = g_slist_remove (info->states, info->states->data);
-}
-
-static ParseState
-peek_state (ParseInfo *info)
-{
- g_return_val_if_fail (info->states != NULL, STATE_START);
-
- return GPOINTER_TO_INT (info->states->data);
-}
-
-#define ELEMENT_IS(name) (strcmp (element_name, (name)) == 0)
-
-static void
-start_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer user_data,
- GError **error)
-{
- ParseInfo *info = (ParseInfo *)user_data;
-
- if (ELEMENT_IS (TAG_RECENT_FILES))
- push_state (info, STATE_RECENT_FILES);
- else if (ELEMENT_IS (TAG_RECENT_ITEM)) {
- info->current_item = egg_recent_item_new ();
- push_state (info, STATE_RECENT_ITEM);
- } else if (ELEMENT_IS (TAG_URI))
- push_state (info, STATE_URI);
- else if (ELEMENT_IS (TAG_MIME_TYPE))
- push_state (info, STATE_MIME_TYPE);
- else if (ELEMENT_IS (TAG_TIMESTAMP))
- push_state (info, STATE_TIMESTAMP);
- else if (ELEMENT_IS (TAG_PRIVATE)) {
- push_state (info, STATE_PRIVATE);
- egg_recent_item_set_private (info->current_item, TRUE);
- } else if (ELEMENT_IS (TAG_GROUPS))
- push_state (info, STATE_GROUPS);
- else if (ELEMENT_IS (TAG_GROUP))
- push_state (info, STATE_GROUP);
-}
-
-static gint
-list_compare_func_mru (gpointer a, gpointer b)
-{
- EggRecentItem *item_a = (EggRecentItem *)a;
- EggRecentItem *item_b = (EggRecentItem *)b;
-
- return item_a->timestamp < item_b->timestamp;
-}
-
-static gint
-list_compare_func_lru (gpointer a, gpointer b)
-{
- EggRecentItem *item_a = (EggRecentItem *)a;
- EggRecentItem *item_b = (EggRecentItem *)b;
-
- return item_a->timestamp > item_b->timestamp;
-}
-
-
-
-static void
-end_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- gpointer user_data,
- GError **error)
-{
- ParseInfo *info = (ParseInfo *)user_data;
-
- switch (peek_state (info)) {
- case STATE_RECENT_ITEM:
- info->items = g_list_append (info->items,
- info->current_item);
- if (info->current_item->uri == NULL ||
- strlen (info->current_item->uri) == 0)
- g_warning ("URI NOT LOADED");
- break;
- default:
- break;
- }
-
- pop_state (info);
-}
-
-static void
-text_handler (GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer user_data,
- GError **error)
-{
- ParseInfo *info = (ParseInfo *)user_data;
-
- switch (peek_state (info)) {
- case STATE_START:
- case STATE_RECENT_FILES:
- case STATE_RECENT_ITEM:
- case STATE_PRIVATE:
- case STATE_GROUPS:
- break;
- case STATE_URI:
- egg_recent_item_set_uri (info->current_item, text);
- break;
- case STATE_MIME_TYPE:
- egg_recent_item_set_mime_type (info->current_item,
- text);
- break;
- case STATE_TIMESTAMP:
- egg_recent_item_set_timestamp (info->current_item,
- (time_t)atoi (text));
- break;
- case STATE_GROUP:
- egg_recent_item_add_group (info->current_item,
- text);
- break;
- }
-
-}
-
-static void
-error_handler (GMarkupParseContext *context,
- GError *error,
- gpointer user_data)
-{
- g_warning ("Error in parse: %s", error->message);
-}
-
-static void
-egg_recent_model_enforce_limit (GList *list, int limit)
-{
- int len;
- GList *end;
-
- /* limit < 0 means unlimited */
- if (limit <= 0)
- return;
-
- len = g_list_length (list);
-
- if (len > limit) {
- GList *next;
-
- end = g_list_nth (list, limit-1);
- next = end->next;
-
- end->next = NULL;
-
- EGG_RECENT_ITEM_LIST_UNREF (next);
- }
-}
-
-static GList *
-egg_recent_model_sort (EggRecentModel *model, GList *list)
-{
- switch (model->priv->sort_type) {
- case EGG_RECENT_MODEL_SORT_MRU:
- list = g_list_sort (list,
- (GCompareFunc)list_compare_func_mru);
- break;
- case EGG_RECENT_MODEL_SORT_LRU:
- list = g_list_sort (list,
- (GCompareFunc)list_compare_func_lru);
- break;
- case EGG_RECENT_MODEL_SORT_NONE:
- break;
- }
-
- return list;
-}
-
-static gboolean
-egg_recent_model_group_match (EggRecentItem *item, GSList *groups)
-{
- GSList *tmp;
-
- tmp = groups;
-
- while (tmp != NULL) {
- const gchar * group = (const gchar *)tmp->data;
-
- if (egg_recent_item_in_group (item, group))
- return TRUE;
-
- tmp = tmp->next;
- }
-
- return FALSE;
-}
-
-static GList *
-egg_recent_model_filter (EggRecentModel *model,
- GList *list)
-{
- EggRecentItem *item;
- GList *newlist = NULL;
- gchar *mime_type;
- gchar *uri;
-
- g_return_val_if_fail (list != NULL, NULL);
-
- while (list) {
- gboolean pass_mime_test = FALSE;
- gboolean pass_group_test = FALSE;
- gboolean pass_scheme_test = FALSE;
- item = (EggRecentItem *)list->data;
- list = list->next;
-
- uri = egg_recent_item_get_uri (item);
-
- /* filter by mime type */
- if (model->priv->mime_filter_values != NULL) {
- mime_type = egg_recent_item_get_mime_type (item);
-
- if (egg_recent_model_string_match
- (model->priv->mime_filter_values,
- mime_type))
- pass_mime_test = TRUE;
-
- g_free (mime_type);
- } else
- pass_mime_test = TRUE;
-
- /* filter by group */
- if (pass_mime_test && model->priv->group_filter_values != NULL) {
- if (egg_recent_model_group_match
- (item, model->priv->group_filter_values))
- pass_group_test = TRUE;
- } else if (egg_recent_item_get_private (item)) {
- pass_group_test = FALSE;
- } else
- pass_group_test = TRUE;
-
- /* filter by URI scheme */
- if (pass_mime_test && pass_group_test &&
- model->priv->scheme_filter_values != NULL) {
- gchar *scheme;
-
- scheme = egg_recent_vfs_get_uri_scheme (uri);
-
- if (egg_recent_model_string_match
- (model->priv->scheme_filter_values, scheme))
- pass_scheme_test = TRUE;
-
- g_free (scheme);
- } else
- pass_scheme_test = TRUE;
-
- if (pass_mime_test && pass_group_test && pass_scheme_test)
- newlist = g_list_prepend (newlist, item);
-
- g_free (uri);
- }
-
- if (newlist) {
- newlist = g_list_reverse (newlist);
- g_list_free (list);
- }
-
-
- return newlist;
-}
-
-
-
-static void
-egg_recent_model_monitor_list_cb (GnomeVFSMonitorHandle *handle,
- const gchar *monitor_uri,
- const gchar *info_uri,
- GnomeVFSMonitorEventType event_type,
- gpointer user_data)
-{
- EggRecentModel *model;
-
- model = EGG_RECENT_MODEL (user_data);
-
- if (event_type == GNOME_VFS_MONITOR_EVENT_DELETED) {
- egg_recent_model_delete (model, monitor_uri);
- g_hash_table_remove (model->priv->monitors, monitor_uri);
- }
-}
-
-
-
-static void
-egg_recent_model_monitor_list (EggRecentModel *model, GList *list)
-{
- GList *tmp;
-
- tmp = list;
- while (tmp) {
- EggRecentItem *item = (EggRecentItem *)tmp->data;
- GnomeVFSMonitorHandle *handle;
- GnomeVFSResult res;
- gchar *uri;
-
- tmp = tmp->next;
-
- uri = egg_recent_item_get_uri (item);
- if (g_hash_table_lookup (model->priv->monitors, uri)) {
- /* already monitoring this one */
- g_free (uri);
- continue;
- }
-
- res = gnome_vfs_monitor_add (&handle, uri,
- GNOME_VFS_MONITOR_FILE,
- egg_recent_model_monitor_list_cb,
- model);
-
- if (res == GNOME_VFS_OK)
- g_hash_table_insert (model->priv->monitors, uri, handle);
- else
- g_free (uri);
- }
-}
-
-
-
-static gboolean
-egg_recent_model_changed_timeout (EggRecentModel *model)
-{
- egg_recent_model_changed (model);
-
- return FALSE;
-}
-
-static void
-egg_recent_model_monitor_cb (GnomeVFSMonitorHandle *handle,
- const gchar *monitor_uri,
- const gchar *info_uri,
- GnomeVFSMonitorEventType event_type,
- gpointer user_data)
-{
- EggRecentModel *model;
-
- g_return_if_fail (user_data != NULL);
- g_return_if_fail (EGG_IS_RECENT_MODEL (user_data));
- model = EGG_RECENT_MODEL (user_data);
-
- if (event_type == GNOME_VFS_MONITOR_EVENT_CHANGED) {
- if (model->priv->changed_timeout > 0) {
- g_source_remove (model->priv->changed_timeout);
- }
-
- model->priv->changed_timeout = g_timeout_add (
- EGG_RECENT_MODEL_TIMEOUT_LENGTH,
- (GSourceFunc)egg_recent_model_changed_timeout,
- model);
- }
-}
-
-static void
-egg_recent_model_monitor (EggRecentModel *model, gboolean should_monitor)
-{
- GnomeVFSResult res;
-
- if (should_monitor && model->priv->monitor == NULL) {
-
- res = gnome_vfs_monitor_add (&model->priv->monitor,
- model->priv->path,
- GNOME_VFS_MONITOR_FILE,
- egg_recent_model_monitor_cb,
- model);
-
- if (res != GNOME_VFS_OK)
- g_warning ("Unable to monitor XML document. Notification "
- "of changes in recent documents list will not be"
- "available.");
- } else if (!should_monitor && model->priv->monitor != NULL) {
- gnome_vfs_monitor_cancel (model->priv->monitor);
- model->priv->monitor = NULL;
- }
-}
-
-static void
-egg_recent_model_set_limit_internal (EggRecentModel *model, int limit)
-{
- model->priv->limit = limit;
-
- if (limit <= 0)
- egg_recent_model_monitor (model, FALSE);
- else {
- egg_recent_model_monitor (model, TRUE);
- egg_recent_model_changed (model);
- }
-}
-
-static GList *
-egg_recent_model_read (EggRecentModel *model, FILE *file)
-{
- GList *list=NULL;
- gchar *content;
- GMarkupParseContext *ctx;
- ParseInfo info;
- GError *error;
-
- content = egg_recent_model_read_raw (model, file);
-
- if (strlen (content) <= 0)
- return NULL;
-
- parse_info_init (&info);
-
- ctx = g_markup_parse_context_new (&parser, 0, &info, NULL);
-
- error = NULL;
- if (!g_markup_parse_context_parse (ctx, content, strlen (content),
- &error)) {
- g_warning (error->message);
- g_error_free (error);
- error = NULL;
- goto out;
- }
-
- error = NULL;
- if (!g_markup_parse_context_end_parse (ctx, &error))
- goto out;
-
- g_markup_parse_context_free (ctx);
-out:
- list = info.items;
-
- parse_info_free (&info);
-
- g_free (content);
-
- /*
- g_print ("Total items: %d\n", g_list_length (list));
- */
-
- return list;
-}
-
-
-static gboolean
-egg_recent_model_write (EggRecentModel *model, FILE *file, GList *list)
-{
- GString *string;
- gchar *data;
- EggRecentItem *item;
- const GList *groups;
- int i;
- int ret;
-
- string = g_string_new ("<?xml version=\"1.0\"?>\n");
- string = g_string_append (string, "<" TAG_RECENT_FILES ">\n");
-
- i=0;
- while (list) {
- gchar *uri;
- gchar *mime_type;
- gchar *escaped_uri;
- time_t timestamp;
- item = (EggRecentItem *)list->data;
-
-
- uri = egg_recent_item_get_uri (item);
- escaped_uri = g_markup_escape_text (uri,
- strlen (uri));
- g_free (uri);
-
- mime_type = egg_recent_item_get_mime_type (item);
- timestamp = egg_recent_item_get_timestamp (item);
-
- string = g_string_append (string, " <" TAG_RECENT_ITEM ">\n");
-
- g_string_append_printf (string,
- " <" TAG_URI ">%s</" TAG_URI ">\n", escaped_uri);
-
- if (mime_type)
- g_string_append_printf (string,
- " <" TAG_MIME_TYPE ">%s</" TAG_MIME_TYPE ">\n", mime_type);
- else
- g_string_append_printf (string,
- " <" TAG_MIME_TYPE "></" TAG_MIME_TYPE ">\n");
-
-
- g_string_append_printf (string,
- " <" TAG_TIMESTAMP ">%d</" TAG_TIMESTAMP ">\n", (int)timestamp);
-
- if (egg_recent_item_get_private (item))
- string = g_string_append (string,
- " <" TAG_PRIVATE "/>\n");
-
- /* write the groups */
- string = g_string_append (string,
- " <" TAG_GROUPS ">\n");
- groups = egg_recent_item_get_groups (item);
-
- if (groups == NULL && egg_recent_item_get_private (item))
- g_warning ("Item with URI \"%s\" marked as private, but"
- " does not belong to any groups.\n", uri);
-
- while (groups) {
- const gchar *group = (const gchar *)groups->data;
- gchar *escaped_group;
-
- escaped_group = g_markup_escape_text (group, strlen(group));
-
- g_string_append_printf (string,
- " <" TAG_GROUP ">%s</" TAG_GROUP ">\n",
- escaped_group);
-
- g_free (escaped_group);
-
- groups = groups->next;
- }
-
- string = g_string_append (string, " </" TAG_GROUPS ">\n");
-
- string = g_string_append (string,
- " </" TAG_RECENT_ITEM ">\n");
-
- g_free (mime_type);
- g_free (escaped_uri);
-
- list = list->next;
- i++;
- }
-
- string = g_string_append (string, "</" TAG_RECENT_FILES ">");
-
- data = g_string_free (string, FALSE);
-
- ret = egg_recent_model_write_raw (model, file, data);
-
- g_free (data);
-
- return ret;
-}
-
-static FILE *
-egg_recent_model_open_file (EggRecentModel *model)
-{
- FILE *file;
-
- file = fopen (model->priv->path, "r+");
- if (file == NULL) {
- file = fopen (model->priv->path, "w+");
-
- g_return_val_if_fail (file != NULL, NULL);
- }
-
- return file;
-}
-
-static gboolean
-egg_recent_model_lock_file (FILE *file)
-{
- int fd;
-
- rewind (file);
- fd = fileno (file);
-
- return lockf (fd, F_LOCK, 0) == 0 ? TRUE : FALSE;
-}
-
-static gboolean
-egg_recent_model_unlock_file (FILE *file)
-{
- int fd;
-
- rewind (file);
- fd = fileno (file);
-
- return lockf (fd, F_ULOCK, 0) < 0 ? FALSE : TRUE;
-}
-
-static void
-egg_recent_model_finalize (GObject *object)
-{
- EggRecentModel *model = EGG_RECENT_MODEL (object);
-
- egg_recent_model_monitor (model, FALSE);
-
-
- g_slist_foreach (model->priv->mime_filter_values,
- (GFunc) g_pattern_spec_free, NULL);
- g_slist_free (model->priv->mime_filter_values);
- model->priv->mime_filter_values = NULL;
-
- g_slist_foreach (model->priv->scheme_filter_values,
- (GFunc) g_pattern_spec_free, NULL);
- g_slist_free (model->priv->scheme_filter_values);
- model->priv->scheme_filter_values = NULL;
-
- g_slist_foreach (model->priv->group_filter_values,
- (GFunc) g_free, NULL);
- g_slist_free (model->priv->group_filter_values);
- model->priv->group_filter_values = NULL;
-
-
- if (model->priv->limit_change_notify_id)
- gconf_client_notify_remove (model->priv->client,
- model->priv->limit_change_notify_id);
- model->priv->expiration_change_notify_id = 0;
-
- if (model->priv->expiration_change_notify_id)
- gconf_client_notify_remove (model->priv->client,
- model->priv->expiration_change_notify_id);
- model->priv->expiration_change_notify_id = 0;
-
- g_object_unref (model->priv->client);
- model->priv->client = NULL;
-
-
- g_free (model->priv->path);
- model->priv->path = NULL;
-
- g_hash_table_destroy (model->priv->monitors);
- model->priv->monitors = NULL;
-
-
- g_free (model->priv);
-}
-
-static void
-egg_recent_model_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EggRecentModel *model = EGG_RECENT_MODEL (object);
-
- switch (prop_id)
- {
- case PROP_MIME_FILTERS:
- model->priv->mime_filter_values =
- (GSList *)g_value_get_pointer (value);
- break;
-
- case PROP_GROUP_FILTERS:
- model->priv->group_filter_values =
- (GSList *)g_value_get_pointer (value);
- break;
-
- case PROP_SCHEME_FILTERS:
- model->priv->scheme_filter_values =
- (GSList *)g_value_get_pointer (value);
- break;
-
- case PROP_SORT_TYPE:
- model->priv->sort_type = g_value_get_int (value);
- break;
-
- case PROP_LIMIT:
- egg_recent_model_set_limit (model,
- g_value_get_int (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-egg_recent_model_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EggRecentModel *model = EGG_RECENT_MODEL (object);
-
- switch (prop_id)
- {
- case PROP_MIME_FILTERS:
- g_value_set_pointer (value, model->priv->mime_filter_values);
- break;
-
- case PROP_GROUP_FILTERS:
- g_value_set_pointer (value, model->priv->group_filter_values);
- break;
-
- case PROP_SCHEME_FILTERS:
- g_value_set_pointer (value, model->priv->scheme_filter_values);
- break;
-
- case PROP_SORT_TYPE:
- g_value_set_int (value, model->priv->sort_type);
- break;
-
- case PROP_LIMIT:
- g_value_set_int (value, model->priv->limit);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-egg_recent_model_class_init (EggRecentModelClass * klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->set_property = egg_recent_model_set_property;
- object_class->get_property = egg_recent_model_get_property;
- object_class->finalize = egg_recent_model_finalize;
-
- model_signals[CHANGED] = g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EggRecentModelClass, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
-
- g_object_class_install_property (object_class,
- PROP_MIME_FILTERS,
- g_param_spec_pointer ("mime-filters",
- "Mime Filters",
- "List of mime types to be allowed.",
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class,
- PROP_GROUP_FILTERS,
- g_param_spec_pointer ("group-filters",
- "Group Filters",
- "List of groups to be allowed.",
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class,
- PROP_SCHEME_FILTERS,
- g_param_spec_pointer ("scheme-filters",
- "Scheme Filters",
- "List of URI schemes to be allowed.",
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class,
- PROP_SORT_TYPE,
- g_param_spec_int ("sort-type",
- "Sort Type",
- "Type of sorting to be done.",
- 0, EGG_RECENT_MODEL_SORT_NONE,
- EGG_RECENT_MODEL_SORT_MRU,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class,
- PROP_LIMIT,
- g_param_spec_int ("limit",
- "Limit",
- "Max number of items allowed.",
- -1, EGG_RECENT_MODEL_MAX_ITEMS,
- EGG_RECENT_MODEL_DEFAULT_LIMIT,
- G_PARAM_READWRITE));
-
- klass->changed = NULL;
-}
-
-
-
-static void
-egg_recent_model_limit_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
-{
- EggRecentModel *model;
- GConfValue *value;
-
- model = EGG_RECENT_MODEL (user_data);
-
- g_return_if_fail (model != NULL);
-
- if (model->priv->use_default_limit == FALSE)
- return; /* ignore this key */
-
- /* the key was unset, and the schema has apparently failed */
- if (entry == NULL)
- return;
-
- value = gconf_entry_get_value (entry);
-
- if (value->type != GCONF_VALUE_INT) {
- g_warning ("Expected GConfValue of type integer, "
- "got something else");
- }
-
-
- egg_recent_model_set_limit_internal (model, gconf_value_get_int (value));
-}
-
-static void
-egg_recent_model_expiration_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
-{
-
-}
-
-static void
-egg_recent_model_init (EggRecentModel * model)
-{
- if (!gnome_vfs_init ()) {
- g_warning ("gnome-vfs initialization failed.");
- return;
- }
-
-
- model->priv = g_new0 (EggRecentModelPrivate, 1);
-
- model->priv->path = g_strdup_printf ("%s" EGG_RECENT_MODEL_FILE_PATH,
- g_get_home_dir ());
-
- model->priv->mime_filter_values = NULL;
- model->priv->group_filter_values = NULL;
- model->priv->scheme_filter_values = NULL;
-
- model->priv->client = gconf_client_get_default ();
- gconf_client_add_dir (model->priv->client, EGG_RECENT_MODEL_KEY_DIR,
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-
- model->priv->limit_change_notify_id =
- gconf_client_notify_add (model->priv->client,
- EGG_RECENT_MODEL_DEFAULT_LIMIT_KEY,
- egg_recent_model_limit_changed,
- model, NULL, NULL);
-
- model->priv->expiration_change_notify_id =
- gconf_client_notify_add (model->priv->client,
- EGG_RECENT_MODEL_EXPIRE_KEY,
- egg_recent_model_expiration_changed,
- model, NULL, NULL);
-
- model->priv->expire_days = gconf_client_get_int (
- model->priv->client,
- EGG_RECENT_MODEL_EXPIRE_KEY,
- NULL);
-
-#if 0
- /* keep this out, for now */
- model->priv->limit = gconf_client_get_int (
- model->priv->client,
- EGG_RECENT_MODEL_DEFAULT_LIMIT_KEY, NULL);
- model->priv->use_default_limit = TRUE;
-#endif
- model->priv->limit = EGG_RECENT_MODEL_DEFAULT_LIMIT;
- model->priv->use_default_limit = FALSE;
-
- model->priv->monitors = g_hash_table_new_full (
- g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) gnome_vfs_monitor_cancel);
-
- model->priv->monitor = NULL;
- egg_recent_model_monitor (model, TRUE);
-}
-
-
-/**
- * egg_recent_model_new:
- * @sort: the type of sorting to use
- * @limit: maximum number of items in the list
- *
- * This creates a new EggRecentModel object.
- *
- * Returns: a EggRecentModel object
- */
-EggRecentModel *
-egg_recent_model_new (EggRecentModelSort sort)
-{
- EggRecentModel *model;
-
- model = EGG_RECENT_MODEL (g_object_new (egg_recent_model_get_type (),
- "sort-type", sort, NULL));
-
- g_return_val_if_fail (model, NULL);
-
- return model;
-}
-
-/**
- * egg_recent_model_add_full:
- * @model: A EggRecentModel object.
- * @item: A EggRecentItem
- *
- * This function adds an item to the list of recently used URIs.
- *
- * Returns: gboolean
- */
-gboolean
-egg_recent_model_add_full (EggRecentModel * model, EggRecentItem *item)
-{
- FILE *file;
- GList *list = NULL;
- gboolean ret = FALSE;
- gboolean updated = FALSE;
- time_t t;
- gchar *uri;
-
- g_return_val_if_fail (model != NULL, FALSE);
- g_return_val_if_fail (EGG_IS_RECENT_MODEL (model), FALSE);
-
- file = egg_recent_model_open_file (model);
- g_return_val_if_fail (file != NULL, FALSE);
-
- time (&t);
- egg_recent_item_set_timestamp (item, t);
-
- uri = egg_recent_item_get_uri (item);
-
- if (egg_recent_model_lock_file (file)) {
-
- /* read existing stuff */
- list = egg_recent_model_read (model, file);
-
- /* if it's already there, we just update it */
- updated = egg_recent_model_update_item (list, item);
-
- if (!updated) {
- list = g_list_prepend (list, item);
-
- egg_recent_model_enforce_limit (list,
- EGG_RECENT_MODEL_MAX_ITEMS);
- }
-
- /* write new stuff */
- if (!egg_recent_model_write (model, file, list))
- g_warning ("Write failed: %s", strerror (errno));
-
- if (!updated)
- list = g_list_remove (list, item);
-
- EGG_RECENT_ITEM_LIST_UNREF (list);
- ret = TRUE;
- } else {
- g_warning ("Failed to lock: %s", strerror (errno));
- return FALSE;
- }
-
- if (!egg_recent_model_unlock_file (file))
- g_warning ("Failed to unlock: %s", strerror (errno));
-
- fclose (file);
-
- if (model->priv->monitor == NULL) {
- /* since monitoring isn't working, at least give a
- * local notification
- */
- egg_recent_model_changed (model);
- }
-
- return ret;
-}
-
-/**
- * egg_recent_model_add:
- * @model: A EggRecentModel object.
- * @uri: A string URI
- *
- * This function adds an item to the list of recently used URIs.
- *
- * Returns: gboolean
- */
-gboolean
-egg_recent_model_add (EggRecentModel *model, const gchar *uri)
-{
- EggRecentItem *item;
- gboolean ret = FALSE;
-
- g_return_val_if_fail (model != NULL, FALSE);
- g_return_val_if_fail (uri != NULL, FALSE);
-
- item = egg_recent_item_new_from_uri (uri);
-
- g_return_val_if_fail (item != NULL, FALSE);
-
- ret = egg_recent_model_add_full (model, item);
-
- egg_recent_item_unref (item);
-
- return ret;
-}
-
-
-
-/**
- * egg_recent_model_delete:
- * @model: A EggRecentModel object.
- * @uri: The URI you want to delete.
- *
- * This function deletes a URI from the file of recently used URIs.
- *
- * Returns: gboolean
- */
-gboolean
-egg_recent_model_delete (EggRecentModel * model, const gchar * uri)
-{
- FILE *file;
- GList *list;
- unsigned int length;
- gboolean ret = FALSE;
-
- g_return_val_if_fail (model != NULL, FALSE);
- g_return_val_if_fail (EGG_IS_RECENT_MODEL (model), FALSE);
- g_return_val_if_fail (uri != NULL, FALSE);
-
- file = egg_recent_model_open_file (model);
- g_return_val_if_fail (file != NULL, FALSE);
-
- if (egg_recent_model_lock_file (file)) {
- list = egg_recent_model_read (model, file);
-
- if (list == NULL)
- goto out;
-
- length = g_list_length (list);
-
- list = egg_recent_model_delete_from_list (list, uri);
-
- if (length == g_list_length (list)) {
- /* nothing was deleted */
- EGG_RECENT_ITEM_LIST_UNREF (list);
- } else {
- egg_recent_model_write (model, file, list);
- EGG_RECENT_ITEM_LIST_UNREF (list);
- ret = TRUE;
-
- }
- } else {
- g_warning ("Failed to lock: %s", strerror (errno));
- return FALSE;
- }
-
-out:
-
- if (!egg_recent_model_unlock_file (file))
- g_warning ("Failed to unlock: %s", strerror (errno));
-
- fclose (file);
-
- g_hash_table_remove (model->priv->monitors, uri);
-
- if (model->priv->monitor == NULL && ret) {
- /* since monitoring isn't working, at least give a
- * local notification
- */
- egg_recent_model_changed (model);
- }
-
- return ret;
-}
-
-
-/**
- * egg_recent_model_get_list:
- * @model: A EggRecentModel object.
- *
- * This function gets the current contents of the file
- *
- * Returns: a GList
- */
-GList *
-egg_recent_model_get_list (EggRecentModel *model)
-{
- FILE *file;
- GList *list=NULL;
-
- file = egg_recent_model_open_file (model);
- g_return_val_if_fail (file != NULL, FALSE);
-
- if (egg_recent_model_lock_file (file)) {
- list = egg_recent_model_read (model, file);
-
- } else {
- g_warning ("Failed to lock: %s", strerror (errno));
- return FALSE;
- }
-
- if (!egg_recent_model_unlock_file (file))
- g_warning ("Failed to unlock: %s", strerror (errno));
-
- if (list != NULL) {
- list = egg_recent_model_filter (model, list);
- list = egg_recent_model_sort (model, list);
-
- egg_recent_model_enforce_limit (list, model->priv->limit);
- }
-
- fclose (file);
-
- return list;
-}
-
-
-
-/**
- * egg_recent_model_set_limit:
- * @model: A EggRecentModel object.
- * @limit: The maximum length of the list
- *
- * This function sets the maximum length of the list. Note: This only affects
- * the length of the list emitted in the "changed" signal, not the list stored
- * on disk.
- *
- * Returns: void
- */
-void
-egg_recent_model_set_limit (EggRecentModel *model, int limit)
-{
- model->priv->use_default_limit = FALSE;
-
- egg_recent_model_set_limit_internal (model, limit);
-}
-
-/**
- * egg_recent_model_get_limit:
- * @model: A EggRecentModel object.
- *
- * This function gets the maximum length of the list.
- *
- * Returns: int
- */
-int
-egg_recent_model_get_limit (EggRecentModel *model)
-{
- return model->priv->limit;
-}
-
-
-/**
- * egg_recent_model_clear:
- * @model: A EggRecentModel object.
- *
- * This function clears the contents of the file
- *
- * Returns: void
- */
-void
-egg_recent_model_clear (EggRecentModel *model)
-{
- FILE *file;
- int fd;
-
- file = egg_recent_model_open_file (model);
- g_return_if_fail (file != NULL);
-
- fd = fileno (file);
-
- if (egg_recent_model_lock_file (file)) {
- ftruncate (fd, 0);
- } else {
- g_warning ("Failed to lock: %s", strerror (errno));
- return;
- }
-
- if (!egg_recent_model_unlock_file (file))
- g_warning ("Failed to unlock: %s", strerror (errno));
-
- fclose (file);
-}
-
-
-/**
- * egg_recent_model_set_filter_mime_types:
- * @model: A EggRecentModel object.
- *
- * Sets which mime types are allowed in the list.
- *
- * Returns: void
- */
-void
-egg_recent_model_set_filter_mime_types (EggRecentModel *model,
- ...)
-{
- va_list valist;
- GSList *list = NULL;
- gchar *str;
-
- g_return_if_fail (model != NULL);
-
- if (model->priv->mime_filter_values != NULL) {
- g_slist_foreach (model->priv->mime_filter_values,
- (GFunc) g_pattern_spec_free, NULL);
- g_slist_free (model->priv->mime_filter_values);
- model->priv->mime_filter_values = NULL;
- }
-
- va_start (valist, model);
-
- str = va_arg (valist, gchar*);
-
- while (str != NULL) {
- list = g_slist_prepend (list, g_pattern_spec_new (str));
-
- str = va_arg (valist, gchar*);
- }
-
- va_end (valist);
-
- model->priv->mime_filter_values = list;
-}
-
-/**
- * egg_recent_model_set_filter_groups:
- * @model: A EggRecentModel object.
- *
- * Sets which groups are allowed in the list.
- *
- * Returns: void
- */
-void
-egg_recent_model_set_filter_groups (EggRecentModel *model,
- ...)
-{
- va_list valist;
- GSList *list = NULL;
- gchar *str;
-
- g_return_if_fail (model != NULL);
-
- if (model->priv->group_filter_values != NULL) {
- g_slist_foreach (model->priv->group_filter_values, (GFunc)g_free, NULL);
- g_slist_free (model->priv->group_filter_values);
- model->priv->group_filter_values = NULL;
- }
-
- va_start (valist, model);
-
- str = va_arg (valist, gchar*);
-
- while (str != NULL) {
- list = g_slist_prepend (list, g_strdup (str));
-
- str = va_arg (valist, gchar*);
- }
-
- va_end (valist);
-
- model->priv->group_filter_values = list;
-}
-
-/**
- * egg_recent_model_set_filter_uri_schemes:
- * @model: A EggRecentModel object.
- *
- * Sets which URI schemes (file, http, ftp, etc) are allowed in the list.
- *
- * Returns: void
- */
-void
-egg_recent_model_set_filter_uri_schemes (EggRecentModel *model, ...)
-{
- va_list valist;
- GSList *list = NULL;
- gchar *str;
-
- g_return_if_fail (model != NULL);
-
- if (model->priv->scheme_filter_values != NULL) {
- g_slist_foreach (model->priv->scheme_filter_values,
- (GFunc) g_pattern_spec_free, NULL);
- g_slist_free (model->priv->scheme_filter_values);
- model->priv->scheme_filter_values = NULL;
- }
-
- va_start (valist, model);
-
- str = va_arg (valist, gchar*);
-
- while (str != NULL) {
- list = g_slist_prepend (list, g_pattern_spec_new (str));
-
- str = va_arg (valist, gchar*);
- }
-
- va_end (valist);
-
- model->priv->scheme_filter_values = list;
-}
-
-/**
- * egg_recent_model_set_sort:
- * @model: A EggRecentModel object.
- * @sort: A EggRecentModelSort type
- *
- * Sets the type of sorting to be used.
- *
- * Returns: void
- */
-void
-egg_recent_model_set_sort (EggRecentModel *model,
- EggRecentModelSort sort)
-{
- g_return_if_fail (model != NULL);
-
- model->priv->sort_type = sort;
-}
-
-/**
- * egg_recent_model_changed:
- * @model: A EggRecentModel object.
- *
- * This function causes a "changed" signal to be emitted.
- *
- * Returns: void
- */
-void
-egg_recent_model_changed (EggRecentModel *model)
-{
- GList *list = NULL;
-
- if (model->priv->limit > 0) {
- list = egg_recent_model_get_list (model);
- egg_recent_model_monitor_list (model, list);
-
- g_signal_emit (G_OBJECT (model), model_signals[CHANGED], 0,
- list);
- }
-
- if (list)
- EGG_RECENT_ITEM_LIST_UNREF (list);
-}
-
-static void
-egg_recent_model_remove_expired_list (EggRecentModel *model, GList *list)
-{
- time_t current_time;
- time_t day_seconds;
-
- time (&current_time);
- day_seconds = model->priv->expire_days*24*60*60;
-
- while (list != NULL) {
- EggRecentItem *item = list->data;
- time_t timestamp;
-
- timestamp = egg_recent_item_get_timestamp (item);
-
- if ((timestamp+day_seconds) < current_time) {
- gchar *uri = egg_recent_item_get_uri (item);
- egg_recent_model_delete (model, uri);
-
- g_strdup (uri);
- }
-
- list = list->next;
- }
-}
-
-
-/**
- * egg_recent_model_remove_expired:
- * @model: A EggRecentModel object.
- *
- * Goes through the entire list, and removes any items that are older than
- * the user-specified expiration period.
- *
- * Returns: void
- */
-void
-egg_recent_model_remove_expired (EggRecentModel *model)
-{
- FILE *file;
- GList *list=NULL;
-
- g_return_if_fail (model != NULL);
-
- file = egg_recent_model_open_file (model);
- g_return_if_fail (file != NULL);
-
- if (egg_recent_model_lock_file (file)) {
- list = egg_recent_model_read (model, file);
-
- } else {
- g_warning ("Failed to lock: %s", strerror (errno));
- return;
- }
-
- if (!egg_recent_model_unlock_file (file))
- g_warning ("Failed to unlock: %s", strerror (errno));
-
- if (list != NULL) {
- egg_recent_model_remove_expired_list (model, list);
- EGG_RECENT_ITEM_LIST_UNREF (list);
- }
-
- fclose (file);
-}
-
-/**
- * egg_recent_model_get_type:
- *
- * This returns a GType representing a EggRecentModel object.
- *
- * Returns: a GType
- */
-GType
-egg_recent_model_get_type (void)
-{
- static GType egg_recent_model_type = 0;
-
- if(!egg_recent_model_type) {
- static const GTypeInfo egg_recent_model_info = {
- sizeof (EggRecentModelClass),
- NULL, /* base init */
- NULL, /* base finalize */
- (GClassInitFunc)egg_recent_model_class_init, /* class init */
- NULL, /* class finalize */
- NULL, /* class data */
- sizeof (EggRecentModel),
- 0,
- (GInstanceInitFunc) egg_recent_model_init
- };
-
- egg_recent_model_type = g_type_register_static (G_TYPE_OBJECT,
- "EggRecentModel",
- &egg_recent_model_info, 0);
- }
-
- return egg_recent_model_type;
-}
-
diff --git a/libnautilus-private/egg-recent-model.h b/libnautilus-private/egg-recent-model.h
deleted file mode 100644
index 8c2eb8da1..000000000
--- a/libnautilus-private/egg-recent-model.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-#ifndef __EGG_RECENT_MODEL_H__
-#define __EGG_RECENT_MODEL_H__
-
-#include "egg-recent-item.h"
-
-G_BEGIN_DECLS
-
-#define EGG_TYPE_RECENT_MODEL (egg_recent_model_get_type ())
-#define EGG_RECENT_MODEL(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, EGG_TYPE_RECENT_MODEL, EggRecentModel)
-#define EGG_RECENT_MODEL_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, EGG_TYPE_RECENT_MODEL, EggRecentModelClass)
-#define EGG_IS_RECENT_MODEL(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, egg_recent_model_get_type ())
-
-typedef struct _EggRecentModel EggRecentModel;
-typedef struct _EggRecentModelPrivate EggRecentModelPrivate;
-typedef struct _EggRecentModelClass EggRecentModelClass;
-
-struct _EggRecentModel {
- GObject parent_instance;
-
- EggRecentModelPrivate *priv;
-};
-
-struct _EggRecentModelClass {
- GObjectClass parent_class;
-
- void (*changed) (EggRecentModel *model, GList *list);
-};
-
-typedef enum {
- EGG_RECENT_MODEL_SORT_MRU,
- EGG_RECENT_MODEL_SORT_LRU,
- EGG_RECENT_MODEL_SORT_NONE
-} EggRecentModelSort;
-
-
-/* Standard group names */
-#define EGG_RECENT_GROUP_LAUNCHERS "Launchers"
-
-
-GType egg_recent_model_get_type (void);
-
-/* constructors */
-EggRecentModel * egg_recent_model_new (EggRecentModelSort sort);
-
-/* public methods */
-void egg_recent_model_set_filter_mime_types (EggRecentModel *model,
- ...);
-
-void egg_recent_model_set_filter_groups (EggRecentModel *model, ...);
-
-void egg_recent_model_set_filter_uri_schemes (EggRecentModel *model,
- ...);
-
-void egg_recent_model_set_sort (EggRecentModel *model,
- EggRecentModelSort sort);
-
-gboolean egg_recent_model_add_full (EggRecentModel *model,
- EggRecentItem *item);
-
-gboolean egg_recent_model_add (EggRecentModel *model,
- const gchar *uri);
-
-gboolean egg_recent_model_delete (EggRecentModel *model,
- const gchar *uri);
-
-void egg_recent_model_clear (EggRecentModel *model);
-
-GList * egg_recent_model_get_list (EggRecentModel *model);
-
-void egg_recent_model_changed (EggRecentModel *model);
-
-void egg_recent_model_set_limit (EggRecentModel *model, int limit);
-int egg_recent_model_get_limit (EggRecentModel *model);
-
-void egg_recent_model_remove_expired (EggRecentModel *model);
-
-G_END_DECLS
-
-#endif /* __EGG_RECENT_MODEL_H__ */
diff --git a/libnautilus-private/egg-recent-vfs-utils.c b/libnautilus-private/egg-recent-vfs-utils.c
deleted file mode 100644
index 51083dd96..000000000
--- a/libnautilus-private/egg-recent-vfs-utils.c
+++ /dev/null
@@ -1,570 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/* gnome-vfs-utils.c - Utility gnome-vfs methods. Will use gnome-vfs
- HEAD in time.
-
- Copyright (C) 1999 Free Software Foundation
- Copyright (C) 2000, 2001 Eazel, Inc.
-
- The Gnome Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The Gnome Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the Gnome Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- Authors: Ettore Perazzoli <ettore@comm2000.it>
- John Sullivan <sullivan@eazel.com>
- Darin Adler <darin@eazel.com>
-*/
-
-#include <config.h>
-
-#include "egg-recent-vfs-utils.h"
-
-#include <libgnomevfs/gnome-vfs-utils.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef ENABLE_NLS
-#include <glib.h>
-
-#include <libintl.h>
-#define _(String) gettext(String)
-
-#ifdef gettext_noop
-#define N_(String) gettext_noop(String)
-#else
-#define N_(String) (String)
-#endif
-#else /* NLS is disabled */
-#define _(String) (String)
-#define N_(String) (String)
-#define textdomain(String) (String)
-#define gettext(String) (String)
-#define dgettext(Domain,String) (String)
-#define dcgettext(Domain,String,Type) (String)
-#define bindtextdomain(Domain,Directory) (Domain)
-#endif
-
-static char *
-make_valid_utf8 (const char *name)
-{
- GString *string;
- const char *remainder, *invalid;
- int remaining_bytes, valid_bytes;
-
- string = NULL;
- remainder = name;
- remaining_bytes = strlen (name);
-
- while (remaining_bytes != 0) {
- if (g_utf8_validate (remainder, remaining_bytes, &invalid)) {
- break;
- }
- valid_bytes = invalid - remainder;
-
- if (string == NULL) {
- string = g_string_sized_new (remaining_bytes);
- }
- g_string_append_len (string, remainder, valid_bytes);
- g_string_append_c (string, '?');
-
- remaining_bytes -= valid_bytes + 1;
- remainder = invalid + 1;
- }
-
- if (string == NULL) {
- return g_strdup (name);
- }
-
- g_string_append (string, remainder);
- g_string_append (string, _(" (invalid Unicode)"));
- g_assert (g_utf8_validate (string->str, -1, NULL));
-
- return g_string_free (string, FALSE);
-}
-
-static gboolean
-istr_has_prefix (const char *haystack, const char *needle)
-{
- const char *h, *n;
- char hc, nc;
-
- /* Eat one character at a time. */
- h = haystack == NULL ? "" : haystack;
- n = needle == NULL ? "" : needle;
- do {
- if (*n == '\0') {
- return TRUE;
- }
- if (*h == '\0') {
- return FALSE;
- }
- hc = *h++;
- nc = *n++;
- hc = g_ascii_tolower (hc);
- nc = g_ascii_tolower (nc);
- } while (hc == nc);
- return FALSE;
-}
-
-static gboolean
-str_has_prefix (const char *haystack, const char *needle)
-{
- const char *h, *n;
-
- /* Eat one character at a time. */
- h = haystack == NULL ? "" : haystack;
- n = needle == NULL ? "" : needle;
- do {
- if (*n == '\0') {
- return TRUE;
- }
- if (*h == '\0') {
- return FALSE;
- }
- } while (*h++ == *n++);
- return FALSE;
-}
-
-static gboolean
-uri_is_local_scheme (const char *uri)
-{
- gboolean is_local_scheme;
- char *temp_scheme;
- int i;
- char *local_schemes[] = {"file:", "help:", "ghelp:", "gnome-help:",
- "trash:", "man:", "info:",
- "hardware:", "search:", "pipe:",
- "gnome-trash:", NULL};
-
- is_local_scheme = FALSE;
- for (temp_scheme = *local_schemes, i = 0; temp_scheme != NULL; i++, temp_scheme = local_schemes[i]) {
- is_local_scheme = istr_has_prefix (uri, temp_scheme);
- if (is_local_scheme) {
- break;
- }
- }
-
- return is_local_scheme;
-}
-
-static char *
-handle_trailing_slashes (const char *uri)
-{
- char *temp, *uri_copy;
- gboolean previous_char_is_column, previous_chars_are_slashes_without_column;
- gboolean previous_chars_are_slashes_with_column;
- gboolean is_local_scheme;
-
- g_assert (uri != NULL);
-
- uri_copy = g_strdup (uri);
- if (strlen (uri_copy) <= 2) {
- return uri_copy;
- }
-
- is_local_scheme = uri_is_local_scheme (uri);
-
- previous_char_is_column = FALSE;
- previous_chars_are_slashes_without_column = FALSE;
- previous_chars_are_slashes_with_column = FALSE;
-
- /* remove multiple trailing slashes */
- for (temp = uri_copy; *temp != '\0'; temp++) {
- if (*temp == '/' && !previous_char_is_column) {
- previous_chars_are_slashes_without_column = TRUE;
- } else if (*temp == '/' && previous_char_is_column) {
- previous_chars_are_slashes_without_column = FALSE;
- previous_char_is_column = TRUE;
- previous_chars_are_slashes_with_column = TRUE;
- } else {
- previous_chars_are_slashes_without_column = FALSE;
- previous_char_is_column = FALSE;
- previous_chars_are_slashes_with_column = FALSE;
- }
-
- if (*temp == ':') {
- previous_char_is_column = TRUE;
- }
- }
-
- if (*temp == '\0' && previous_chars_are_slashes_without_column) {
- if (is_local_scheme) {
- /* go back till you remove them all. */
- for (temp--; *(temp) == '/'; temp--) {
- *temp = '\0';
- }
- } else {
- /* go back till you remove them all but one. */
- for (temp--; *(temp - 1) == '/'; temp--) {
- *temp = '\0';
- }
- }
- }
-
- if (*temp == '\0' && previous_chars_are_slashes_with_column) {
- /* go back till you remove them all but three. */
- for (temp--; *(temp - 3) != ':' && *(temp - 2) != ':' && *(temp - 1) != ':'; temp--) {
- *temp = '\0';
- }
- }
-
-
- return uri_copy;
-}
-
-static char *
-make_uri_canonical (const char *uri)
-{
- char *canonical_uri, *old_uri, *p;
- gboolean relative_uri;
-
- relative_uri = FALSE;
-
- if (uri == NULL) {
- return NULL;
- }
-
- /* FIXME bugzilla.eazel.com 648:
- * This currently ignores the issue of two uris that are not identical but point
- * to the same data except for the specific cases of trailing '/' characters,
- * file:/ and file:///, and "lack of file:".
- */
-
- canonical_uri = handle_trailing_slashes (uri);
-
- /* Note: In some cases, a trailing slash means nothing, and can
- * be considered equivalent to no trailing slash. But this is
- * not true in every case; specifically not for web addresses passed
- * to a web-browser. So we don't have the trailing-slash-equivalence
- * logic here, but we do use that logic in EelDirectory where
- * the rules are more strict.
- */
-
- /* Add file: if there is no scheme. */
- if (strchr (canonical_uri, ':') == NULL) {
- old_uri = canonical_uri;
-
- if (old_uri[0] != '/') {
- /* FIXME bugzilla.eazel.com 5069:
- * bandaid alert. Is this really the right thing to do?
- *
- * We got what really is a relative path. We do a little bit of
- * a stretch here and assume it was meant to be a cryptic absolute path,
- * and convert it to one. Since we can't call gnome_vfs_uri_new and
- * gnome_vfs_uri_to_string to do the right make-canonical conversion,
- * we have to do it ourselves.
- */
- relative_uri = TRUE;
- canonical_uri = gnome_vfs_make_path_name_canonical (old_uri);
- g_free (old_uri);
- old_uri = canonical_uri;
- canonical_uri = g_strconcat ("file:///", old_uri, NULL);
- } else {
- canonical_uri = g_strconcat ("file:", old_uri, NULL);
- }
- g_free (old_uri);
- }
-
- /* Lower-case the scheme. */
- for (p = canonical_uri; *p != ':'; p++) {
- g_assert (*p != '\0');
- *p = g_ascii_tolower (*p);
- }
-
- if (!relative_uri) {
- old_uri = canonical_uri;
- canonical_uri = gnome_vfs_make_uri_canonical (canonical_uri);
- if (canonical_uri != NULL) {
- g_free (old_uri);
- } else {
- canonical_uri = old_uri;
- }
- }
-
- /* FIXME bugzilla.eazel.com 2802:
- * Work around gnome-vfs's desire to convert file:foo into file://foo
- * by converting to file:///foo here. When you remove this, check that
- * typing "foo" into location bar does not crash and returns an error
- * rather than displaying the contents of /
- */
- if (str_has_prefix (canonical_uri, "file://")
- && !str_has_prefix (canonical_uri, "file:///")) {
- old_uri = canonical_uri;
- canonical_uri = g_strconcat ("file:/", old_uri + 5, NULL);
- g_free (old_uri);
- }
-
- return canonical_uri;
-}
-
-static char *
-format_uri_for_display (const char *uri, gboolean filenames_are_locale_encoded)
-{
- char *canonical_uri, *path, *utf8_path;
-
- g_return_val_if_fail (uri != NULL, g_strdup (""));
-
- canonical_uri = make_uri_canonical (uri);
-
- /* If there's no fragment and it's a local path. */
- path = gnome_vfs_get_local_path_from_uri (canonical_uri);
-
- if (path != NULL) {
- if (filenames_are_locale_encoded) {
- utf8_path = g_locale_to_utf8 (path, -1, NULL, NULL, NULL);
- if (utf8_path) {
- g_free (canonical_uri);
- g_free (path);
- return utf8_path;
- }
- } else if (g_utf8_validate (path, -1, NULL)) {
- g_free (canonical_uri);
- return path;
- }
- }
-
- if (canonical_uri && !g_utf8_validate (canonical_uri, -1, NULL)) {
- utf8_path = make_valid_utf8 (canonical_uri);
- g_free (canonical_uri);
- canonical_uri = utf8_path;
- }
-
- g_free (path);
- return canonical_uri;
-}
-
-char *
-egg_recent_vfs_format_uri_for_display (const char *uri)
-{
- static gboolean broken_filenames;
-
- broken_filenames = g_getenv ("G_BROKEN_FILENAMES") != NULL;
-
- return format_uri_for_display (uri, broken_filenames);
-}
-
-static gboolean
-is_valid_scheme_character (char c)
-{
- return g_ascii_isalnum (c) || c == '+' || c == '-' || c == '.';
-}
-
-static gboolean
-has_valid_scheme (const char *uri)
-{
- const char *p;
-
- p = uri;
-
- if (!is_valid_scheme_character (*p)) {
- return FALSE;
- }
-
- do {
- p++;
- } while (is_valid_scheme_character (*p));
-
- return *p == ':';
-}
-
-static char *
-escape_high_chars (const guchar *string)
-{
- char *result;
- const guchar *scanner;
- guchar *result_scanner;
- int escape_count;
- static const gchar hex[16] = "0123456789ABCDEF";
-
-#define ACCEPTABLE(a) ((a)>=32 && (a)<128)
-
- escape_count = 0;
-
- if (string == NULL) {
- return NULL;
- }
-
- for (scanner = string; *scanner != '\0'; scanner++) {
- if (!ACCEPTABLE(*scanner)) {
- escape_count++;
- }
- }
-
- if (escape_count == 0) {
- return g_strdup (string);
- }
-
- /* allocate two extra characters for every character that
- * needs escaping and space for a trailing zero
- */
- result = g_malloc (scanner - string + escape_count * 2 + 1);
- for (scanner = string, result_scanner = result; *scanner != '\0'; scanner++) {
- if (!ACCEPTABLE(*scanner)) {
- *result_scanner++ = '%';
- *result_scanner++ = hex[*scanner >> 4];
- *result_scanner++ = hex[*scanner & 15];
-
- } else {
- *result_scanner++ = *scanner;
- }
- }
-
- *result_scanner = '\0';
-
- return result;
-}
-
-static char *
-make_uri_from_input_internal (const char *text,
- gboolean filenames_are_locale_encoded,
- gboolean strip_trailing_whitespace)
-{
- char *stripped, *path, *uri, *locale_path, *filesystem_path, *escaped;
-
- g_return_val_if_fail (text != NULL, g_strdup (""));
-
- /* Strip off leading whitespaces (since they can't be part of a valid
- uri). Only strip off trailing whitespaces when requested since
- they might be part of a valid uri.
- */
- if (strip_trailing_whitespace) {
- stripped = g_strstrip (g_strdup (text));
- } else {
- stripped = g_strchug (g_strdup (text));
- }
-
- switch (stripped[0]) {
- case '\0':
- uri = g_strdup ("");
- break;
- case '/':
- if (filenames_are_locale_encoded) {
- GError *error = NULL;
- locale_path = g_locale_from_utf8 (stripped, -1, NULL, NULL, &error);
- if (locale_path != NULL) {
- uri = gnome_vfs_get_uri_from_local_path (locale_path);
- g_free (locale_path);
- } else {
- /* We couldn't convert to the locale. */
- /* FIXME: We should probably give a user-visible error here. */
- uri = g_strdup("");
- }
- } else {
- uri = gnome_vfs_get_uri_from_local_path (stripped);
- }
- break;
- case '~':
- if (filenames_are_locale_encoded) {
- filesystem_path = g_locale_from_utf8 (stripped, -1, NULL, NULL, NULL);
- } else {
- filesystem_path = g_strdup (stripped);
- }
- /* deliberately falling into default case on fail */
- if (filesystem_path != NULL) {
- path = gnome_vfs_expand_initial_tilde (filesystem_path);
- g_free (filesystem_path);
- if (*path == '/') {
- uri = gnome_vfs_get_uri_from_local_path (path);
- g_free (path);
- break;
- }
- g_free (path);
- }
- /* don't insert break here, read above comment */
- default:
- if (has_valid_scheme (stripped)) {
- uri = escape_high_chars (stripped);
- } else {
- escaped = escape_high_chars (stripped);
- uri = g_strconcat ("http://", escaped, NULL);
- g_free (escaped);
- }
- }
-
- g_free (stripped);
-
- return uri;
-
-}
-
-char *
-egg_recent_vfs_make_uri_from_input (const char *uri)
-{
- static gboolean broken_filenames;
-
- broken_filenames = g_getenv ("G_BROKEN_FILENAMES") != NULL;
-
- return make_uri_from_input_internal (uri, broken_filenames, TRUE);
-}
-
-static char *
-make_uri_canonical_strip_fragment (const char *uri)
-{
- const char *fragment;
- char *without_fragment, *canonical;
-
- fragment = strchr (uri, '#');
- if (fragment == NULL) {
- return make_uri_canonical (uri);
- }
-
- without_fragment = g_strndup (uri, fragment - uri);
- canonical = make_uri_canonical (without_fragment);
- g_free (without_fragment);
- return canonical;
-}
-
-static gboolean
-uris_match (const char *uri_1, const char *uri_2, gboolean ignore_fragments)
-{
- char *canonical_1, *canonical_2;
- gboolean result;
-
- if (ignore_fragments) {
- canonical_1 = make_uri_canonical_strip_fragment (uri_1);
- canonical_2 = make_uri_canonical_strip_fragment (uri_2);
- } else {
- canonical_1 = make_uri_canonical (uri_1);
- canonical_2 = make_uri_canonical (uri_2);
- }
-
- result = strcmp (canonical_1, canonical_2) == 0;
-
- g_free (canonical_1);
- g_free (canonical_2);
-
- return result;
-}
-
-gboolean
-egg_recent_vfs_uris_match (const char *uri_1, const char *uri_2)
-{
- return uris_match (uri_1, uri_2, FALSE);
-}
-
-char *
-egg_recent_vfs_get_uri_scheme (const char *uri)
-{
- char *colon;
-
- g_return_val_if_fail (uri != NULL, NULL);
-
- colon = strchr (uri, ':');
-
- if (colon == NULL) {
- return NULL;
- }
-
- return g_strndup (uri, colon - uri);
-}
diff --git a/libnautilus-private/egg-recent-vfs-utils.h b/libnautilus-private/egg-recent-vfs-utils.h
deleted file mode 100644
index 619b25b49..000000000
--- a/libnautilus-private/egg-recent-vfs-utils.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* gnome-vfs-utils.h - Utility gnome-vfs methods. Will use gnome-vfs
- HEAD in time.
-
- Copyright (C) 1999 Free Software Foundation
- Copyright (C) 2000 Eazel, Inc.
-
- The Gnome Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The Gnome Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the Gnome Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- Authors: Ettore Perazzoli <ettore@comm2000.it>
- John Sullivan <sullivan@eazel.com>
-*/
-
-#ifndef EGG_RECENT_VFS_UTILS_H
-#define EGG_RECENT_VFS_UTILS_H
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-char *egg_recent_vfs_format_uri_for_display (const char *uri);
-char *egg_recent_vfs_make_uri_from_input (const char *uri);
-gboolean egg_recent_vfs_uris_match (const char *uri_1,
- const char *uri_2);
-char *egg_recent_vfs_get_uri_scheme (const char *uri);
-
-G_END_DECLS
-
-#endif /* GNOME_VFS_UTILS_H */
diff --git a/libnautilus-private/egg-screen-exec.c b/libnautilus-private/egg-screen-exec.c
deleted file mode 100644
index 94a068e36..000000000
--- a/libnautilus-private/egg-screen-exec.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/* egg-screen-exec.c
- *
- * Copyright (C) 2002 Sun Microsystems Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Mark McLoughlin <mark@skynet.ie>
- */
-
-#include <config.h>
-
-#include "egg-screen-exec.h"
-
-#include <string.h>
-#include <libgnome/gnome-exec.h>
-
-#ifndef HAVE_GTK_MULTIHEAD
-#include <gdk/gdkx.h>
-#endif
-
-extern char **environ;
-
-/**
- * egg_screen_exec_display_string:
- * @screen: A #GdkScreen
- *
- * Description: Returns a string that when passed to XOpenDisplay()
- * would cause @screen to be the default screen on the newly opened
- * X display. This string is suitable for setting $DISPLAY when
- * launching an application which should appear on @screen.
- *
- * Returns: a newly allocated string or %NULL on error.
- **/
-char *
-egg_screen_exec_display_string (GdkScreen *screen)
-{
-#ifdef HAVE_GTK_MULTIHEAD
- GString *str;
- const char *old_display;
- char *retval;
- char *p;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
- if (gdk_screen_get_default () == screen)
- return g_strdup_printf ("DISPLAY=%s",
- gdk_display_get_name (
- gdk_screen_get_display (screen)));
-
- old_display = gdk_display_get_name (gdk_screen_get_display (screen));
-
- str = g_string_new ("DISPLAY=");
- g_string_append (str, old_display);
-
- p = strrchr (str->str, '.');
- if (p && p > strchr (str->str, ':'))
- g_string_truncate (str, p - str->str);
-
- g_string_append_printf (str, ".%d", gdk_screen_get_number (screen));
-
- retval = str->str;
-
- g_string_free (str, FALSE);
-
- return retval;
-#else
- return g_strdup (DisplayString (GDK_DISPLAY ()));
-#endif
-}
-
-/**
- * egg_screen_exec_environment:
- * @screen: A #GdkScreen
- *
- * Description: Modifies the current program environment to
- * ensure that $DISPLAY is set such that a launched application
- * inheriting this environment would appear on @screen.
- *
- * Returns: a newly-allocated %NULL-terminated array of strings or
- * %NULL on error. Use g_strfreev() to free it.
- **/
-char **
-egg_screen_exec_environment (GdkScreen *screen)
-{
- char **retval = NULL;
- int i;
-#ifdef HAVE_GTK_MULTIHEAD
- int display_index = -1;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
- for (i = 0; environ [i]; i++)
- if (!strncmp (environ [i], "DISPLAY", 7))
- display_index = i;
-
- if (display_index == -1)
- display_index = i++;
-#else
- for (i = 0; environ [i]; i++);
-#endif
-
- retval = g_new (char *, i + 1);
-
- for (i = 0; environ [i]; i++)
-#ifdef HAVE_GTK_MULTIHEAD
- if (i == display_index)
- retval [i] = egg_screen_exec_display_string (screen);
- else
-#endif
- retval [i] = g_strdup (environ [i]);
-
- retval [i] = NULL;
-
- return retval;
-}
-
-/**
- * egg_screen_execute_async:
- * @screen: A #GdkScreen
- * @dir: Directory in which child should be executed, or %NULL for current
- * directory
- * @argc: Number of arguments
- * @argv: Argument vector to exec child
- *
- * Description: Like gnome_execute_async(), but ensures that the child
- * is launched in an environment such that if it calls XOpenDisplay()
- * the resulting display would have @screen as the default screen.
- *
- * Returns: process id of child, or %-1 on error.
- **/
-int
-egg_screen_execute_async (GdkScreen *screen,
- const char *dir,
- int argc,
- char * const argv [])
-{
-#ifdef HAVE_GTK_MULTIHEAD
- char **envp = NULL;
- int envc = 0;
- int retval;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
-
- if (gdk_screen_get_default () != screen) {
- envc = 1;
- envp = g_new0 (char *, 2);
- envp [0] = egg_screen_exec_display_string (screen);
- }
-
- retval = gnome_execute_async_with_env (dir, argc, argv, envc, envp);
-
- g_strfreev (envp);
-
- return retval;
-#else
- return gnome_execute_async (dir, argc, argv);
-#endif
-}
-
-/**
- * egg_screen_execute_shell:
- * @screen: A #GdkScreen.
- * @dir: Directory in which child should be executed, or %NULL for current
- * directory
- * @commandline: Shell command to execute
- *
- * Description: Like gnome_execute_shell(), but ensures that the child
- * is launched in an environment such that if it calls XOpenDisplay()
- * the resulting display would have @screen as the default screen.
- *
- * Returns: process id of shell, or %-1 on error.
- **/
-int
-egg_screen_execute_shell (GdkScreen *screen,
- const char *dir,
- const char *command)
-{
-#ifdef HAVE_GTK_MULTIHEAD
- int retval = -1;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
-
- if (gdk_screen_get_default () == screen)
- retval = gnome_execute_shell (dir, command);
-
- else {
- char *exec;
- char *display;
-
- display = egg_screen_exec_display_string (screen);
- exec = g_strconcat (display, " ", command, NULL);
-
- retval = gnome_execute_shell (dir, exec);
-
- g_free (display);
- g_free (exec);
- }
-
- return retval;
-#else
- return gnome_execute_shell (dir, command);
-#endif
-}
-
-/**
- * egg_screen_execute_command_line_async:
- * @screen: A #GdkScreen.
- * @command_line: a command line
- * @error: return location for errors
- *
- * Description: Like g_spawn_command_line_async(), but ensures that
- * the child is launched in an environment such that if it calls
- * XOpenDisplay() the resulting display would have @screen as the
- * default screen.
- *
- * Returns: %TRUE on success, %FALSE if error is set.
- **/
-gboolean
-egg_screen_execute_command_line_async (GdkScreen *screen,
- const char *command,
- GError **error)
-{
-#ifdef HAVE_GTK_MULTIHEAD
- gboolean retval;
- char **argv = NULL;
- char **envp = NULL;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
- g_return_val_if_fail (command != NULL, FALSE);
-
- if (!g_shell_parse_argv (command, NULL, &argv, error))
- return FALSE;
-
- if (gdk_screen_get_default () != screen)
- envp = egg_screen_exec_environment (screen);
-
- retval = g_spawn_async (g_get_home_dir (),
- argv, envp, G_SPAWN_SEARCH_PATH,
- NULL, NULL, NULL, error);
- g_strfreev (argv);
- g_strfreev (envp);
-
- return retval;
-#else
- return g_spawn_command_line_async (command, error);
-#endif
-}
diff --git a/libnautilus-private/egg-screen-exec.h b/libnautilus-private/egg-screen-exec.h
deleted file mode 100644
index 65a6df021..000000000
--- a/libnautilus-private/egg-screen-exec.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* egg-screen-exec.h
- *
- * Copyright (C) 2002 Sun Microsystems Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Mark McLoughlin <mark@skynet.ie>
- */
-
-#ifndef __EGG_SCREEN_EXEC_H__
-#define __EGG_SCREEN_EXEC_H__
-
-#include <gdk/gdk.h>
-
-G_BEGIN_DECLS
-
-char *egg_screen_exec_display_string (GdkScreen *screen);
-char **egg_screen_exec_environment (GdkScreen *screen);
-
-int egg_screen_execute_async (GdkScreen *screen,
- const char *dir,
- int argc,
- char * const argv []);
-int egg_screen_execute_shell (GdkScreen *screen,
- const char *dir,
- const char *command);
-gboolean egg_screen_execute_command_line_async (GdkScreen *screen,
- const char *command,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __EGG_SCREEN_EXEC_H__ */
diff --git a/libnautilus-private/egg-screen-help.c b/libnautilus-private/egg-screen-help.c
deleted file mode 100644
index fd8bb77cf..000000000
--- a/libnautilus-private/egg-screen-help.c
+++ /dev/null
@@ -1,487 +0,0 @@
-/* egg-screen-help.c
- * Copyright (C) 2001 Sid Vicious
- * Copyright (C) 2001 Jonathan Blandford <jrb@alum.mit.edu>
- * Copyright (C) 2002 Sun Microsystems Inc.
- * All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Cambridge, MA 02139, USA.
- *
- * Authors: Mark McLoughlin <mark@skynet.ie>
- */
-
-#include <config.h>
-
-#include "egg-screen-help.h"
-
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <glib.h>
-#include <libgnome/gnome-help.h>
-#include <libgnome/gnome-program.h>
-#include <libgnome/gnome-i18n.h>
-
-#include "egg-screen-url.h"
-#include "egg-screen-exec.h"
-
-/******* START COPIED + PASTED CODE TO GO AWAY ******/
-
-/* The _with_env methods need to go into and
- * be exposed from libgnome. They can then be
- * removed from here.
- */
-
-/**
- * egg_help_display_uri_with_env:
- * @help_uri: The URI to display.
- * @envp: child's environment, or %NULL to inherit parent's.
- * @error: return location for errors.
- *
- * Description: Like gnome_help_display_uri, except that the help viewer
- * application is launched with its environment set to the contents of
- * @envp.
- *
- * Returns: %TRUE on success, %FALSE otherwise (in which case @error will
- * contain the actual error).
- **/
-gboolean
-egg_help_display_uri_with_env (const char *help_uri,
- char **envp,
- GError **error)
-{
- GError *real_error;
- gboolean retval;
-
- real_error = NULL;
- retval = egg_url_show_with_env (help_uri, envp, &real_error);
-
- if (real_error != NULL)
- g_propagate_error (error, real_error);
-
- return retval;
-}
-
-static char *
-locate_help_file (const char *path, const char *doc_name)
-{
- int i;
- char *exts[] = { ".xml", ".docbook", ".sgml", ".html", "", NULL };
- const GList *lang_list = gnome_i18n_get_language_list ("LC_MESSAGES");
-
- for (;lang_list != NULL; lang_list = lang_list->next) {
- const char *lang = lang_list->data;
-
- /* This has to be a valid language AND a language with
- * no encoding postfix. The language will come up without
- * encoding next */
- if (lang == NULL ||
- strchr (lang, '.') != NULL)
- continue;
-
- for (i = 0; exts[i] != NULL; i++) {
- char *name;
- char *full;
-
- name = g_strconcat (doc_name, exts[i], NULL);
- full = g_build_filename (path, lang, name, NULL);
- g_free (name);
-
- if (g_file_test (full, G_FILE_TEST_EXISTS))
- return full;
-
- g_free (full);
- }
- }
-
- return NULL;
-}
-
-/**
- * egg_help_display_with_doc_id_with_env:
- * @program: The current application object, or %NULL for the default one.
- * @doc_id: The document identifier, or %NULL to default to the application ID
- * (app_id) of the specified @program.
- * @file_name: The name of the help document to display.
- * @link_id: Can be %NULL. If set, refers to an anchor or section id within the
- * requested document.
- * @envp: child's environment, or %NULL to inherit parent's.
- * @error: A #GError instance that will hold the specifics of any error which
- * occurs during processing, or %NULL
- *
- * Description: Like gnome_help_display_with_doc_id(), except that the help
- * viewer application is launched with its environment set to the contents
- * of @envp.
- *
- * Returns: %TRUE on success, %FALSE otherwise (in which case @error will
- * contain the actual error).
- **/
-gboolean
-egg_help_display_with_doc_id_with_env (GnomeProgram *program,
- const char *doc_id,
- const char *file_name,
- const char *link_id,
- char **envp,
- GError **error)
-{
- gchar *local_help_path;
- gchar *global_help_path;
- gchar *file;
- struct stat local_help_st;
- struct stat global_help_st;
- gchar *uri;
- gboolean retval;
-
- g_return_val_if_fail (file_name != NULL, FALSE);
-
- retval = FALSE;
-
- local_help_path = NULL;
- global_help_path = NULL;
- file = NULL;
- uri = NULL;
-
- if (program == NULL)
- program = gnome_program_get ();
-
- if (doc_id == NULL)
- doc_id = gnome_program_get_app_id (program);
-
- /* Compute the local and global help paths */
-
- local_help_path = gnome_program_locate_file (program,
- GNOME_FILE_DOMAIN_APP_HELP,
- "",
- FALSE /* only_if_exists */,
- NULL /* ret_locations */);
-
- if (local_help_path == NULL) {
- g_set_error (error,
- GNOME_HELP_ERROR,
- GNOME_HELP_ERROR_INTERNAL,
- _("Unable to find the GNOME_FILE_DOMAIN_APP_HELP domain"));
- goto out;
- }
-
- global_help_path = gnome_program_locate_file (program,
- GNOME_FILE_DOMAIN_HELP,
- "",
- FALSE /* only_if_exists */,
- NULL /* ret_locations */);
- if (global_help_path == NULL) {
- g_set_error (error,
- GNOME_HELP_ERROR,
- GNOME_HELP_ERROR_INTERNAL,
- _("Unable to find the GNOME_FILE_DOMAIN_HELP domain."));
- goto out;
- }
-
- /* Try to access the help paths, first the app-specific help path
- * and then falling back to the global help path if the first one fails.
- */
-
- if (stat (local_help_path, &local_help_st) == 0) {
- if (!S_ISDIR (local_help_st.st_mode)) {
- g_set_error (error,
- GNOME_HELP_ERROR,
- GNOME_HELP_ERROR_NOT_FOUND,
- _("Unable to show help as %s is not a directory. "
- "Please check your installation."),
- local_help_path);
- goto out;
- }
-
- file = locate_help_file (local_help_path, file_name);
- }
-
- if (file == NULL) {
- if (stat (global_help_path, &global_help_st) == 0) {
- if (!S_ISDIR (global_help_st.st_mode)) {
- g_set_error (error,
- GNOME_HELP_ERROR,
- GNOME_HELP_ERROR_NOT_FOUND,
- _("Unable to show help as %s is not a directory. "
- "Please check your installation."),
- global_help_path);
- goto out;
- }
- } else {
- g_set_error (error,
- GNOME_HELP_ERROR,
- GNOME_HELP_ERROR_NOT_FOUND,
- _("Unable to find the help files in either %s "
- "or %s. Please check your installation"),
- local_help_path,
- global_help_path);
- goto out;
- }
-
- if (!(local_help_st.st_dev == global_help_st.st_dev
- && local_help_st.st_ino == global_help_st.st_ino))
- file = locate_help_file (global_help_path, file_name);
- }
-
- if (file == NULL) {
- g_set_error (error,
- GNOME_HELP_ERROR,
- GNOME_HELP_ERROR_NOT_FOUND,
- _("Unable to find the help files in either %s "
- "or %s. Please check your installation"),
- local_help_path,
- global_help_path);
- goto out;
- }
-
- /* Now that we have a file name, try to display it in the help browser */
-
- if (link_id)
- uri = g_strconcat ("ghelp://", file, "?", link_id, NULL);
- else
- uri = g_strconcat ("ghelp://", file, NULL);
-
- retval = egg_help_display_uri_with_env (uri, envp, error);
-
- out:
-
- g_free (local_help_path);
- g_free (global_help_path);
- g_free (file);
- g_free (uri);
-
- return retval;
-}
-
-/**
- * egg_help_display_desktop_with_env:
- * @program: The current application object, or %NULL for the default one.
- * @doc_id: The name of the help file relative to the system's help domain
- * (#GNOME_FILE_DOMAIN_HELP).
- * @file_name: The name of the help document to display.
- * @link_id: Can be %NULL. If set, refers to an anchor or section id within the
- * requested document.
- * @envp: child's environment, or %NULL to inherit parent's.
- * @error: A #GError instance that will hold the specifics of any error which
- * occurs during processing, or %NULL
- *
- * Description: Like gnome_help_display_desktop(), except that the help
- * viewer application is launched with its environment set to the contents
- * of @envp.
- *
- * Returns: %TRUE on success, %FALSE otherwise (in which case @error will
- * contain the actual error).
- **/
-gboolean
-egg_help_display_desktop_with_env (GnomeProgram *program,
- const char *doc_id,
- const char *file_name,
- const char *link_id,
- char **envp,
- GError **error)
-{
- GSList *ret_locations, *li;
- char *file;
- gboolean retval;
- char *url;
-
- g_return_val_if_fail (doc_id != NULL, FALSE);
- g_return_val_if_fail (file_name != NULL, FALSE);
-
- if (program == NULL)
- program = gnome_program_get ();
-
- ret_locations = NULL;
- gnome_program_locate_file (program,
- GNOME_FILE_DOMAIN_HELP,
- doc_id,
- FALSE /* only_if_exists */,
- &ret_locations);
-
- if (ret_locations == NULL) {
- g_set_error (error,
- GNOME_HELP_ERROR,
- GNOME_HELP_ERROR_NOT_FOUND,
- _("Unable to find doc_id %s in the help path"),
- doc_id);
- return FALSE;
- }
-
- file = NULL;
- for (li = ret_locations; li != NULL; li = li->next) {
- char *path = li->data;
-
- file = locate_help_file (path, file_name);
- if (file != NULL)
- break;
- }
-
- g_slist_foreach (ret_locations, (GFunc)g_free, NULL);
- g_slist_free (ret_locations);
-
- if (file == NULL) {
- g_set_error (error,
- GNOME_HELP_ERROR,
- GNOME_HELP_ERROR_NOT_FOUND,
- _("Help document %s/%s not found"),
- doc_id,
- file_name);
- return FALSE;
- }
-
- if (link_id != NULL) {
- url = g_strconcat ("ghelp://", file, "?", link_id, NULL);
- } else {
- url = g_strconcat ("ghelp://", file, NULL);
- }
-
- g_free (file);
-
- retval = egg_help_display_uri_with_env (url, envp, error);
-
- return retval;
-}
-/******* END COPIED + PASTED CODE TO GO AWAY ******/
-
-/**
- * egg_screen_help_display:
- * @screen: a #GdkScreen.
- * @file_name: The name of the help document to display.
- * @link_id: Can be %NULL. If set, refers to an anchor or section id within the
- * requested document.
- * @error: A #GError instance that will hold the specifics of any error which
- * occurs during processing, or %NULL
- *
- * Description: Like gnome_help_display(), but ensures that the help viewer
- * application appears on @screen.
- *
- * Returns: %TRUE on success, %FALSE otherwise (in which case @error will
- * contain the actual error).
- **/
-gboolean
-egg_screen_help_display (GdkScreen *screen,
- const char *file_name,
- const char *link_id,
- GError **error)
-{
- return egg_screen_help_display_with_doc_id (
- screen, NULL, NULL, file_name, link_id, error);
-}
-
-/**
- * egg_screen_help_display_with_doc_id
- * @screen: a #GdkScreen.
- * @program: The current application object, or %NULL for the default one.
- * @doc_id: The document identifier, or %NULL to default to the application ID
- * (app_id) of the specified @program.
- * @file_name: The name of the help document to display.
- * @link_id: Can be %NULL. If set, refers to an anchor or section id within the
- * requested document.
- * @error: A #GError instance that will hold the specifics of any error which
- * occurs during processing, or %NULL
- *
- * Description: Like gnome_help_display_with_doc_id(), but ensures that the help
- * viewer application appears on @screen.
- *
- * Returns: %TRUE on success, %FALSE otherwise (in which case @error will
- * contain the actual error).
- **/
-gboolean
-egg_screen_help_display_with_doc_id (GdkScreen *screen,
- GnomeProgram *program,
- const char *doc_id,
- const char *file_name,
- const char *link_id,
- GError **error)
-{
- gboolean retval;
- char **env;
-
- env = egg_screen_exec_environment (screen);
-
- retval = egg_help_display_with_doc_id_with_env (
- program, doc_id, file_name, link_id, env, error);
-
- g_strfreev (env);
-
- return retval;
-}
-
-/**
- * egg_screen_help_display_desktop
- * @screen: a #GdkScreen.
- * @program: The current application object, or %NULL for the default one.
- * @doc_id: The name of the help file relative to the system's help domain
- * (#GNOME_FILE_DOMAIN_HELP).
- * @file_name: The name of the help document to display.
- * @link_id: Can be %NULL. If set, refers to an anchor or section id within the
- * requested document.
- * @error: A #GError instance that will hold the specifics of any error which
- * occurs during processing, or %NULL
- *
- * Description: Like gnome_help_display_desktop(), but ensures that the help
- * viewer application appears on @screen.
- *
- * Returns: %TRUE on success, %FALSE otherwise (in which case @error will
- * contain the actual error).
- **/
-gboolean
-egg_screen_help_display_desktop (GdkScreen *screen,
- GnomeProgram *program,
- const char *doc_id,
- const char *file_name,
- const char *link_id,
- GError **error)
-{
- gboolean retval;
- char **env;
-
- env = egg_screen_exec_environment (screen);
-
- retval = egg_help_display_desktop_with_env (
- program, doc_id, file_name, link_id, env, error);
-
- g_strfreev (env);
-
- return retval;
-}
-
-/**
- * egg_screen_help_display_uri
- * @screen: a #GdkScreen.
- * @help_uri: The URI to display.
- * @error: A #GError instance that will hold the specifics of any error which
- * occurs during processing, or %NULL
- *
- * Description: Like gnome_help_display_uri(), but ensures that the help viewer
- * application appears on @screen.
- *
- * Returns: %TRUE on success, %FALSE otherwise (in which case @error will
- * contain the actual error).
- **/
-gboolean
-egg_screen_help_display_uri (GdkScreen *screen,
- const char *help_uri,
- GError **error)
-{
- gboolean retval;
- char **env;
-
- env = egg_screen_exec_environment (screen);
-
- retval = egg_help_display_uri_with_env (help_uri, env, error);
-
- g_strfreev (env);
-
- return retval;
-}
diff --git a/libnautilus-private/egg-screen-help.h b/libnautilus-private/egg-screen-help.h
deleted file mode 100644
index 5be7e9749..000000000
--- a/libnautilus-private/egg-screen-help.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* egg-screen-help.h
- *
- * Copyright (C) 2002 Sun Microsystems Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Mark McLoughlin <mark@skynet.ie>
- */
-
-#ifndef __EGG_SCREEN_HELP_H__
-#define __EGG_SCREEN_HELP_H__
-
-#include <glib.h>
-#include <gdk/gdk.h>
-#include <libgnome/gnome-program.h>
-
-G_BEGIN_DECLS
-
-/* Destined for libgnome.
- */
-gboolean egg_help_display_uri_with_env (const char *help_uri,
- char **envp,
- GError **error);
-gboolean egg_help_display_with_doc_id_with_env (GnomeProgram *program,
- const char *doc_id,
- const char *file_name,
- const char *link_id,
- char **envp,
- GError **error);
-gboolean egg_help_display_desktop_with_env (GnomeProgram *program,
- const char *doc_id,
- const char *file_name,
- const char *link_id,
- char **envp,
- GError **error);
-
-/* Destined for libgnomeui.
- */
-gboolean egg_screen_help_display (GdkScreen *screen,
- const char *file_name,
- const char *link_id,
- GError **error);
-gboolean egg_screen_help_display_with_doc_id (GdkScreen *screen,
- GnomeProgram *program,
- const char *doc_id,
- const char *file_name,
- const char *link_id,
- GError **error);
-gboolean egg_screen_help_display_desktop (GdkScreen *screen,
- GnomeProgram *program,
- const char *doc_id,
- const char *file_name,
- const char *link_id,
- GError **error);
-gboolean egg_screen_help_display_uri (GdkScreen *screen,
- const char *help_uri,
- GError **error);
-
-
-G_END_DECLS
-
-#endif /* __EGG_SCREEN_HELP_H__ */
diff --git a/libnautilus-private/egg-screen-url.c b/libnautilus-private/egg-screen-url.c
deleted file mode 100644
index 729fa5d78..000000000
--- a/libnautilus-private/egg-screen-url.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* egg-screen-url.c
- * Copyright (C) 1998, James Henstridge <james@daa.com.au>
- * Copyright (C) 1999, 2000 Red Hat, Inc.
- * Copyright (C) 2002, Sun Microsystems Inc.
- * All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Cambridge, MA 02139, USA.
- *
- * Authors: Mark McLoughlin <mark@skynet.ie>
- */
-
-#include <config.h>
-
-#include "egg-screen-url.h"
-
-#include <string.h>
-#include <glib.h>
-#include <glib-object.h>
-#include <gconf/gconf-client.h>
-#include <libgnome/gnome-url.h>
-
-#include "egg-screen-exec.h"
-
-/******* START COPIED + PASTED CODE TO GO AWAY ******/
-
-#define URL_HANDLER_DIR "/desktop/gnome/url-handlers/"
-#define DEFAULT_HANDLER_PATH "/desktop/gnome/url-handlers/unknown/command"
-
-/* This needs to be exposed from libgnome and
- * removed from here.
- */
-
-/**
- * egg_url_show_with_env:
- * @url: The url to display. Should begin with the protocol to use (e.g.
- * "http:", "ghelp:", etc)
- * @envp: child's environment, or %NULL to inherit parent's.
- * @error: Used to store any errors that result from trying to display the @url.
- *
- * Description: Like gnome_url_show(), except that the viewer application
- * is launched with its environment set to the contents of @envp.
- *
- * Returns: %TRUE if everything went fine, %FALSE otherwise (in which case
- * @error will contain the actual error).
- **/
-gboolean
-egg_url_show_with_env (const char *url,
- char **envp,
- GError **error)
-{
- GConfClient *client;
- gint i;
- gchar *pos, *template;
- int argc;
- char **argv;
- gboolean ret;
-
- g_return_val_if_fail (url != NULL, FALSE);
-
- pos = strchr (url, ':');
-
- client = gconf_client_get_default ();
-
- if (pos != NULL) {
- gchar *protocol, *path;
-
- g_return_val_if_fail (pos >= url, FALSE);
-
- protocol = g_new (gchar, pos - url + 1);
- strncpy (protocol, url, pos - url);
- protocol[pos - url] = '\0';
- g_ascii_strdown (protocol, -1);
-
- path = g_strconcat (URL_HANDLER_DIR, protocol, "/command", NULL);
- template = gconf_client_get_string (client, path, NULL);
-
- if (template == NULL) {
- gchar* template_temp;
-
- template_temp = gconf_client_get_string (client,
- DEFAULT_HANDLER_PATH,
- NULL);
-
- /* Retry to get the right url handler */
- template = gconf_client_get_string (client, path, NULL);
-
- if (template == NULL)
- template = template_temp;
- else
- g_free (template_temp);
-
- }
-
- g_free (path);
- g_free (protocol);
-
- } else {
- /* no ':' ? this shouldn't happen. Use default handler */
- template = gconf_client_get_string (client,
- DEFAULT_HANDLER_PATH,
- NULL);
- }
-
- g_object_unref (G_OBJECT (client));
-
- if (!g_shell_parse_argv (template,
- &argc,
- &argv,
- error)) {
- g_free (template);
- return FALSE;
- }
-
- g_free (template);
-
- for (i = 0; i < argc; i++) {
- char *arg;
-
- if (strcmp (argv[i], "%s") != 0)
- continue;
-
- arg = argv[i];
- argv[i] = g_strdup (url);
- g_free (arg);
- }
-
- /* This can return some errors */
- ret = g_spawn_async (NULL /* working directory */,
- argv,
- envp,
- G_SPAWN_SEARCH_PATH /* flags */,
- NULL /* child_setup */,
- NULL /* data */,
- NULL /* child_pid */,
- error);
-
- g_strfreev (argv);
-
- return ret;
-}
-/******* END COPIED + PASTED CODE TO GO AWAY ******/
-
-/**
- * egg_screen_url_show:
- * @screen: a #GdkScreen.
- * @url: The url to display. Should begin with the protocol to use (e.g.
- * "http:", "ghelp:", etc)
- * @error: Used to store any errors that result from trying to display the @url.
- *
- * Description: Like gnome_url_show(), but ensures that the viewer application
- * appears on @screen.
- *
- * Returns: %TRUE if everything went fine, %FALSE otherwise (in which case
- * @error will contain the actual error).
- **/
-gboolean
-egg_screen_url_show (GdkScreen *screen,
- const char *url,
- GError **error)
-{
- char **env;
- gboolean retval;
-
- env = egg_screen_exec_environment (screen);
-
- retval = egg_url_show_with_env (url, env, error);
-
- g_strfreev (env);
-
- return retval;
-}
diff --git a/libnautilus-private/egg-screen-url.h b/libnautilus-private/egg-screen-url.h
deleted file mode 100644
index 7771b0abf..000000000
--- a/libnautilus-private/egg-screen-url.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* egg-screen-url.h
- *
- * Copyright (C) 2002 Sun Microsystems Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Mark McLoughlin <mark@skynet.ie>
- */
-
-#ifndef __EGG_SCREEN_URL_H__
-#define __EGG_SCREEN_URL_H__
-
-#include <gdk/gdk.h>
-
-G_BEGIN_DECLS
-
-/* Destined for libgnome.
- */
-gboolean egg_url_show_with_env (const char *url,
- char **envp,
- GError **error);
-
-/* Destined for libgnomeui.
- */
-gboolean egg_screen_url_show (GdkScreen *screen,
- const char *url,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __EGG_SCREEN_URL_H__ */
diff --git a/libnautilus-private/eggtreemultidnd.c b/libnautilus-private/eggtreemultidnd.c
deleted file mode 100644
index ae863e786..000000000
--- a/libnautilus-private/eggtreemultidnd.c
+++ /dev/null
@@ -1,414 +0,0 @@
-/* eggtreemultidnd.c
- * Copyright (C) 2001 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <string.h>
-#include <gtk/gtktreeselection.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkmain.h>
-#include "eggtreemultidnd.h"
-
-#define EGG_TREE_MULTI_DND_STRING "EggTreeMultiDndString"
-
-typedef struct
-{
- guint pressed_button;
- gint x;
- gint y;
- guint motion_notify_handler;
- guint button_release_handler;
- guint drag_data_get_handler;
- GSList *events;
-} EggTreeMultiDndData;
-
-/* CUT-N-PASTE from gtktreeview.c */
-typedef struct _TreeViewDragInfo TreeViewDragInfo;
-struct _TreeViewDragInfo
-{
- GdkModifierType start_button_mask;
- GtkTargetList *source_target_list;
- GdkDragAction source_actions;
-
- GtkTargetList *dest_target_list;
-
- guint source_set : 1;
- guint dest_set : 1;
-};
-
-
-GType
-egg_tree_multi_drag_source_get_type (void)
-{
- static GType our_type = 0;
-
- if (!our_type)
- {
- static const GTypeInfo our_info =
- {
- sizeof (EggTreeMultiDragSourceIface), /* class_size */
- NULL, /* base_init */
- NULL, /* base_finalize */
- NULL,
- NULL, /* class_finalize */
- NULL, /* class_data */
- 0,
- 0, /* n_preallocs */
- NULL
- };
-
- our_type = g_type_register_static (G_TYPE_INTERFACE, "EggTreeMultiDragSource", &our_info, 0);
- }
-
- return our_type;
-}
-
-
-/**
- * egg_tree_multi_drag_source_row_draggable:
- * @drag_source: a #EggTreeMultiDragSource
- * @path: row on which user is initiating a drag
- *
- * Asks the #EggTreeMultiDragSource whether a particular row can be used as
- * the source of a DND operation. If the source doesn't implement
- * this interface, the row is assumed draggable.
- *
- * Return value: %TRUE if the row can be dragged
- **/
-gboolean
-egg_tree_multi_drag_source_row_draggable (EggTreeMultiDragSource *drag_source,
- GList *path_list)
-{
- EggTreeMultiDragSourceIface *iface = EGG_TREE_MULTI_DRAG_SOURCE_GET_IFACE (drag_source);
-
- g_return_val_if_fail (EGG_IS_TREE_MULTI_DRAG_SOURCE (drag_source), FALSE);
- g_return_val_if_fail (iface->row_draggable != NULL, FALSE);
- g_return_val_if_fail (path_list != NULL, FALSE);
-
- if (iface->row_draggable)
- return (* iface->row_draggable) (drag_source, path_list);
- else
- return TRUE;
-}
-
-
-/**
- * egg_tree_multi_drag_source_drag_data_delete:
- * @drag_source: a #EggTreeMultiDragSource
- * @path: row that was being dragged
- *
- * Asks the #EggTreeMultiDragSource to delete the row at @path, because
- * it was moved somewhere else via drag-and-drop. Returns %FALSE
- * if the deletion fails because @path no longer exists, or for
- * some model-specific reason. Should robustly handle a @path no
- * longer found in the model!
- *
- * Return value: %TRUE if the row was successfully deleted
- **/
-gboolean
-egg_tree_multi_drag_source_drag_data_delete (EggTreeMultiDragSource *drag_source,
- GList *path_list)
-{
- EggTreeMultiDragSourceIface *iface = EGG_TREE_MULTI_DRAG_SOURCE_GET_IFACE (drag_source);
-
- g_return_val_if_fail (EGG_IS_TREE_MULTI_DRAG_SOURCE (drag_source), FALSE);
- g_return_val_if_fail (iface->drag_data_delete != NULL, FALSE);
- g_return_val_if_fail (path_list != NULL, FALSE);
-
- return (* iface->drag_data_delete) (drag_source, path_list);
-}
-
-/**
- * egg_tree_multi_drag_source_drag_data_get:
- * @drag_source: a #EggTreeMultiDragSource
- * @path: row that was dragged
- * @selection_data: a #EggSelectionData to fill with data from the dragged row
- *
- * Asks the #EggTreeMultiDragSource to fill in @selection_data with a
- * representation of the row at @path. @selection_data->target gives
- * the required type of the data. Should robustly handle a @path no
- * longer found in the model!
- *
- * Return value: %TRUE if data of the required type was provided
- **/
-gboolean
-egg_tree_multi_drag_source_drag_data_get (EggTreeMultiDragSource *drag_source,
- GList *path_list,
- GtkSelectionData *selection_data)
-{
- EggTreeMultiDragSourceIface *iface = EGG_TREE_MULTI_DRAG_SOURCE_GET_IFACE (drag_source);
-
- g_return_val_if_fail (EGG_IS_TREE_MULTI_DRAG_SOURCE (drag_source), FALSE);
- g_return_val_if_fail (iface->drag_data_get != NULL, FALSE);
- g_return_val_if_fail (path_list != NULL, FALSE);
- g_return_val_if_fail (selection_data != NULL, FALSE);
-
- return (* iface->drag_data_get) (drag_source, path_list, selection_data);
-}
-
-static void
-stop_drag_check (GtkWidget *widget)
-{
- EggTreeMultiDndData *priv_data;
- GSList *l;
-
- priv_data = g_object_get_data (G_OBJECT (widget), EGG_TREE_MULTI_DND_STRING);
-
- for (l = priv_data->events; l != NULL; l = l->next)
- gdk_event_free (l->data);
-
- g_slist_free (priv_data->events);
- priv_data->events = NULL;
- g_signal_handler_disconnect (widget, priv_data->motion_notify_handler);
- g_signal_handler_disconnect (widget, priv_data->button_release_handler);
-}
-
-static gboolean
-egg_tree_multi_drag_button_release_event (GtkWidget *widget,
- GdkEventButton *event,
- gpointer data)
-{
- EggTreeMultiDndData *priv_data;
- GSList *l;
-
- priv_data = g_object_get_data (G_OBJECT (widget), EGG_TREE_MULTI_DND_STRING);
-
- for (l = priv_data->events; l != NULL; l = l->next)
- gtk_propagate_event (widget, l->data);
-
- stop_drag_check (widget);
-
- return FALSE;
-}
-
-static void
-selection_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- GList **list_ptr;
-
- list_ptr = (GList **) data;
-
- *list_ptr = g_list_prepend (*list_ptr, gtk_tree_row_reference_new (model, path));
-}
-
-static void
-path_list_free (GList *path_list)
-{
- g_list_foreach (path_list, (GFunc) gtk_tree_row_reference_free, NULL);
- g_list_free (path_list);
-}
-
-static void
-set_context_data (GdkDragContext *context,
- GList *path_list)
-{
- g_object_set_data_full (G_OBJECT (context),
- "egg-tree-view-multi-source-row",
- path_list,
- (GDestroyNotify) path_list_free);
-}
-
-static GList *
-get_context_data (GdkDragContext *context)
-{
- return g_object_get_data (G_OBJECT (context),
- "egg-tree-view-multi-source-row");
-}
-
-/* CUT-N-PASTE from gtktreeview.c */
-static TreeViewDragInfo*
-get_info (GtkTreeView *tree_view)
-{
- return g_object_get_data (G_OBJECT (tree_view), "gtk-tree-view-drag-info");
-}
-
-
-static void
-egg_tree_multi_drag_drag_data_get (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time)
-{
- GtkTreeView *tree_view;
- GtkTreeModel *model;
- TreeViewDragInfo *di;
- GList *path_list;
-
- tree_view = GTK_TREE_VIEW (widget);
-
- model = gtk_tree_view_get_model (tree_view);
-
- if (model == NULL)
- return;
-
- di = get_info (GTK_TREE_VIEW (widget));
-
- if (di == NULL)
- return;
-
- path_list = get_context_data (context);
-
- if (path_list == NULL)
- return;
-
- /* We can implement the GTK_TREE_MODEL_ROW target generically for
- * any model; for DragSource models there are some other targets
- * we also support.
- */
-
- if (EGG_IS_TREE_MULTI_DRAG_SOURCE (model))
- {
- egg_tree_multi_drag_source_drag_data_get (EGG_TREE_MULTI_DRAG_SOURCE (model),
- path_list,
- selection_data);
- }
-}
-
-static gboolean
-egg_tree_multi_drag_motion_event (GtkWidget *widget,
- GdkEventMotion *event,
- gpointer data)
-{
- EggTreeMultiDndData *priv_data;
-
- priv_data = g_object_get_data (G_OBJECT (widget), EGG_TREE_MULTI_DND_STRING);
-
- if (gtk_drag_check_threshold (widget,
- priv_data->x,
- priv_data->y,
- event->x,
- event->y))
- {
- GList *path_list = NULL;
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GdkDragContext *context;
- TreeViewDragInfo *di;
-
- di = get_info (GTK_TREE_VIEW (widget));
-
- if (di == NULL)
- return FALSE;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
- stop_drag_check (widget);
- gtk_tree_selection_selected_foreach (selection, selection_foreach, &path_list);
- path_list = g_list_reverse (path_list);
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
- if (egg_tree_multi_drag_source_row_draggable (EGG_TREE_MULTI_DRAG_SOURCE (model), path_list))
- {
-
- context = gtk_drag_begin (widget,
- di->source_target_list,
- di->source_actions,
- priv_data->pressed_button,
- (GdkEvent*)event);
- set_context_data (context, path_list);
- gtk_drag_set_icon_default (context);
-
- }
- else
- {
- path_list_free (path_list);
- }
- }
-
- return TRUE;
-}
-
-static gboolean
-egg_tree_multi_drag_button_press_event (GtkWidget *widget,
- GdkEventButton *event,
- gpointer data)
-{
- GtkTreeView *tree_view;
- GtkTreePath *path = NULL;
- GtkTreeViewColumn *column = NULL;
- gint cell_x, cell_y;
- GtkTreeSelection *selection;
- EggTreeMultiDndData *priv_data;
-
- tree_view = GTK_TREE_VIEW (widget);
- priv_data = g_object_get_data (G_OBJECT (tree_view), EGG_TREE_MULTI_DND_STRING);
- if (priv_data == NULL)
- {
- priv_data = g_new0 (EggTreeMultiDndData, 1);
- g_object_set_data (G_OBJECT (tree_view), EGG_TREE_MULTI_DND_STRING, priv_data);
- }
-
- if (g_slist_find (priv_data->events, event))
- return FALSE;
-
- if (priv_data->events)
- {
- /* save the event to be propagated in order */
- priv_data->events = g_slist_append (priv_data->events, gdk_event_copy ((GdkEvent*)event));
- return TRUE;
- }
-
- if (event->type == GDK_2BUTTON_PRESS)
- return FALSE;
-
- gtk_tree_view_get_path_at_pos (tree_view,
- event->x, event->y,
- &path, &column,
- &cell_x, &cell_y);
-
- selection = gtk_tree_view_get_selection (tree_view);
-
- if (path && gtk_tree_selection_path_is_selected (selection, path))
- {
- priv_data->pressed_button = event->button;
- priv_data->x = event->x;
- priv_data->y = event->y;
- priv_data->events = g_slist_append (priv_data->events, gdk_event_copy ((GdkEvent*)event));
- priv_data->motion_notify_handler =
- g_signal_connect (G_OBJECT (tree_view), "motion_notify_event", G_CALLBACK (egg_tree_multi_drag_motion_event), NULL);
- priv_data->button_release_handler =
- g_signal_connect (G_OBJECT (tree_view), "button_release_event", G_CALLBACK (egg_tree_multi_drag_button_release_event), NULL);
-
- if (priv_data->drag_data_get_handler == 0)
- {
- priv_data->drag_data_get_handler =
- g_signal_connect (G_OBJECT (tree_view), "drag_data_get", G_CALLBACK (egg_tree_multi_drag_drag_data_get), NULL);
- }
-
- return TRUE;
- }
-
- if (path)
- {
- gtk_tree_path_free (path);
- }
-
- return FALSE;
-}
-
-void
-egg_tree_multi_drag_add_drag_support (GtkTreeView *tree_view)
-{
- g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
- g_signal_connect (G_OBJECT (tree_view), "button_press_event", G_CALLBACK (egg_tree_multi_drag_button_press_event), NULL);
- /* FIXME */
-
-}
-
diff --git a/libnautilus-private/eggtreemultidnd.h b/libnautilus-private/eggtreemultidnd.h
deleted file mode 100644
index 810d48ea7..000000000
--- a/libnautilus-private/eggtreemultidnd.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* eggtreednd.h
- * Copyright (C) 2001 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EGG_TREE_MULTI_DND_H__
-#define __EGG_TREE_MULTI_DND_H__
-
-#include <gtk/gtktreemodel.h>
-#include <gtk/gtktreeview.h>
-#include <gtk/gtkdnd.h>
-
-G_BEGIN_DECLS
-
-#define EGG_TYPE_TREE_MULTI_DRAG_SOURCE (egg_tree_multi_drag_source_get_type ())
-#define EGG_TREE_MULTI_DRAG_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TREE_MULTI_DRAG_SOURCE, EggTreeMultiDragSource))
-#define EGG_IS_TREE_MULTI_DRAG_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TREE_MULTI_DRAG_SOURCE))
-#define EGG_TREE_MULTI_DRAG_SOURCE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), EGG_TYPE_TREE_MULTI_DRAG_SOURCE, EggTreeMultiDragSourceIface))
-
-typedef struct _EggTreeMultiDragSource EggTreeMultiDragSource; /* Dummy typedef */
-typedef struct _EggTreeMultiDragSourceIface EggTreeMultiDragSourceIface;
-
-struct _EggTreeMultiDragSourceIface
-{
- GTypeInterface g_iface;
-
- /* VTable - not signals */
- gboolean (* row_draggable) (EggTreeMultiDragSource *drag_source,
- GList *path_list);
-
- gboolean (* drag_data_get) (EggTreeMultiDragSource *drag_source,
- GList *path_list,
- GtkSelectionData *selection_data);
-
- gboolean (* drag_data_delete) (EggTreeMultiDragSource *drag_source,
- GList *path_list);
-};
-
-GType egg_tree_multi_drag_source_get_type (void) G_GNUC_CONST;
-
-/* Returns whether the given row can be dragged */
-gboolean egg_tree_multi_drag_source_row_draggable (EggTreeMultiDragSource *drag_source,
- GList *path_list);
-
-/* Deletes the given row, or returns FALSE if it can't */
-gboolean egg_tree_multi_drag_source_drag_data_delete (EggTreeMultiDragSource *drag_source,
- GList *path_list);
-
-
-/* Fills in selection_data with type selection_data->target based on the row
- * denoted by path, returns TRUE if it does anything
- */
-gboolean egg_tree_multi_drag_source_drag_data_get (EggTreeMultiDragSource *drag_source,
- GList *path_list,
- GtkSelectionData *selection_data);
-void egg_tree_multi_drag_add_drag_support (GtkTreeView *tree_view);
-
-
-
-G_END_DECLS
-
-#endif /* __EGG_TREE_MULTI_DND_H__ */
diff --git a/libnautilus-private/nautilus-program-chooser.c b/libnautilus-private/nautilus-program-chooser.c
index c49e88c4a..a2fa5d46c 100644
--- a/libnautilus-private/nautilus-program-chooser.c
+++ b/libnautilus-private/nautilus-program-chooser.c
@@ -181,9 +181,8 @@ help_cb (GtkWidget *button, NautilusProgramChooser *program_chooser)
break;
}
- egg_screen_help_display_desktop (
- gtk_window_get_screen (GTK_WINDOW (program_chooser)),
- NULL, "user-guide", "wgosnautilus.xml", section, &error);
+ egg_help_display_desktop_on_screen (NULL, "user-guide", "wgosnautilus.xml", section,
+ gtk_window_get_screen (GTK_WINDOW (program_chooser)), &error);
if (error) {
GtkWidget *err_dialog;
diff --git a/libnautilus-private/update-from-egg.sh b/libnautilus-private/update-from-egg.sh
deleted file mode 100755
index 9be68a9b4..000000000
--- a/libnautilus-private/update-from-egg.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-
-function die() {
- echo $*
- exit 1
-}
-
-if test -z "$EGGDIR"; then
- echo "Must set EGGDIR"
- exit 1
-fi
-
-if test -z "$EGGFILES"; then
- echo "Must set EGGFILES"
- exit 1
-fi
-
-for FILE in $EGGFILES; do
- if cmp -s $EGGDIR/$FILE $FILE; then
- echo "File $FILE is unchanged"
- else
- cp $EGGDIR/$FILE $FILE || die "Could not move $EGGDIR/$FILE to $FILE"
- echo "Updated $FILE"
- fi
-done