SOURCES: gnome-desktop-recently-used-apps.patch (NEW) - add suppor...
patrys
patrys at pld-linux.org
Tue Aug 29 23:00:30 CEST 2006
Author: patrys Date: Tue Aug 29 21:00:30 2006 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- add support for slab (gnome-main-menu)
- taken from SUSE
---- Files affected:
SOURCES:
gnome-desktop-recently-used-apps.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/gnome-desktop-recently-used-apps.patch
diff -u /dev/null SOURCES/gnome-desktop-recently-used-apps.patch:1.1
--- /dev/null Tue Aug 29 23:00:30 2006
+++ SOURCES/gnome-desktop-recently-used-apps.patch Tue Aug 29 23:00:24 2006
@@ -0,0 +1,2668 @@
+diff -urN ../gnome-desktop-2.12.2-pristine/libgnome-desktop/egg-recent-item.c ./libgnome-desktop/egg-recent-item.c
+--- ../gnome-desktop-2.12.2-pristine/libgnome-desktop/egg-recent-item.c 1969-12-31 19:00:00.000000000 -0500
++++ ./libgnome-desktop/egg-recent-item.c 2006-05-08 16:18:44.000000000 -0400
+@@ -0,0 +1,426 @@
++/* -*- 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 at 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"
++
++
++
++EggRecentItem *
++egg_recent_item_new (void)
++{
++ EggRecentItem *item;
++
++ item = g_new (EggRecentItem, 1);
++
++ item->groups = NULL;
++ item->private_data = FALSE;
++ item->uri = NULL;
++ item->mime_type = NULL;
++ item->mime_type_is_explicit = FALSE;
++
++ 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);
++}
++
++EggRecentItem *
++egg_recent_item_ref (EggRecentItem *item)
++{
++ item->refcount++;
++ return item;
++}
++
++EggRecentItem *
++egg_recent_item_unref (EggRecentItem *item)
++{
++ item->refcount--;
++
++ if (item->refcount == 0) {
++ egg_recent_item_free (item);
++ }
++
++ return 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;
++ }
++
++ return item;
++}
++
++static void
++egg_recent_item_update_mime_type (EggRecentItem *item)
++{
++ if (!item->mime_type_is_explicit) {
++ g_free (item->mime_type);
++ item->mime_type = NULL;
++
++ if (item->uri)
++ item->mime_type = gnome_vfs_get_mime_type (item->uri);
++
++ if (!item->mime_type)
++ item->mime_type = g_strdup (GNOME_VFS_MIME_TYPE_UNKNOWN);
++ }
++}
++
++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 = gnome_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 = gnome_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 gnome_vfs_format_uri_for_display (item->uri);
++}
++
++/* Stolen from gnome_vfs_make_valid_utf8() */
++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 = name ? strlen (name) : 0;
++
++ 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 file name)")); */
++ g_assert (g_utf8_validate (string->str, -1, NULL));
++
++ return g_string_free (string, FALSE);
++}
++
++static gchar *
++get_uri_shortname_for_display (GnomeVFSURI *uri)
++{
++ gchar *name;
++ gboolean validated;
++
++ validated = FALSE;
++ name = gnome_vfs_uri_extract_short_name (uri);
++
++ if (name == NULL)
++ {
++ name = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_PASSWORD);
++ }
++ else if (g_ascii_strcasecmp (uri->method_string, "file") == 0)
++ {
++ gchar *text_uri;
++ gchar *local_file;
++ text_uri = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_PASSWORD);
++ local_file = gnome_vfs_get_local_path_from_uri (text_uri);
++
++ if (local_file != NULL)
++ {
++ g_free (name);
++ name = g_filename_display_basename (local_file);
++ validated = TRUE;
++ }
++
++ g_free (local_file);
++ g_free (text_uri);
++ }
++ else if (!gnome_vfs_uri_has_parent (uri))
++ {
++ const gchar *method;
++
++ method = uri->method_string;
++
++ if (name == NULL ||
++ strcmp (name, GNOME_VFS_URI_PATH_STR) == 0)
++ {
++ g_free (name);
++ name = g_strdup (method);
++ }
++ else
++ {
++ gchar *tmp;
++
++ tmp = name;
++ name = g_strdup_printf ("%s: %s", method, name);
++ g_free (tmp);
++ }
++ }
++
++ if (!validated && !g_utf8_validate (name, -1, NULL))
++ {
++ gchar *utf8_name;
++
++ utf8_name = make_valid_utf8 (name);
++ g_free (name);
++ name = utf8_name;
++ }
++
++ return name;
++}
++
++/**
++ * egg_recent_item_get_short_name:
++ * @item: an #EggRecentItem
++ *
++ * Computes a valid UTF-8 string that can be used as the name of the item in a
++ * menu or list. For example, calling this function on an item that refers to
++ * "file:///foo/bar.txt" will yield "bar.txt".
++ *
++ * Return value: A newly-allocated string in UTF-8 encoding; free it with
++ * g_free().
++ **/
++gchar *
++egg_recent_item_get_short_name (const EggRecentItem *item)
++{
++ GnomeVFSURI *uri;
++ gchar *short_name;
++
++ g_return_val_if_fail (item != NULL, NULL);
++
++ if (item->uri == NULL)
++ return NULL;
++
++ uri = gnome_vfs_uri_new (item->uri);
++ if (uri == NULL)
++ return NULL;
++
++ short_name = get_uri_shortname_for_display (uri);
++
++ gnome_vfs_uri_unref (uri);
++
++ return short_name;
++}
++
++void
++egg_recent_item_set_mime_type (EggRecentItem *item, const gchar *mime)
++{
++ g_free (item->mime_type);
++ item->mime_type = NULL;
++
++ if (mime && mime[0]) {
++ item->mime_type_is_explicit = TRUE;
++ item->mime_type = g_strdup (mime);
++ } else {
++ item->mime_type_is_explicit = FALSE;
++ }
++}
++
++gchar *
++egg_recent_item_get_mime_type (EggRecentItem *item)
++{
++ egg_recent_item_update_mime_type (item);
++
++ return g_strdup (item->mime_type);
++}
++
++void
++egg_recent_item_set_timestamp (EggRecentItem *item, time_t timestamp)
++{
++ if (timestamp == (time_t) -1)
++ time (×tamp);
++
++ 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_data = priv;
++}
++
++gboolean
++egg_recent_item_get_private (const EggRecentItem *item)
++{
++ return item->private_data;
++}
++
++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 -urN ../gnome-desktop-2.12.2-pristine/libgnome-desktop/egg-recent-item.h ./libgnome-desktop/egg-recent-item.h
+--- ../gnome-desktop-2.12.2-pristine/libgnome-desktop/egg-recent-item.h 1969-12-31 19:00:00.000000000 -0500
++++ ./libgnome-desktop/egg-recent-item.h 2006-05-08 16:18:44.000000000 -0400
+@@ -0,0 +1,80 @@
++
++#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_data;
++
++ GList *groups;
++
++ int refcount;
++
++ guint mime_type_is_explicit : 1;
++};
++
++GType egg_recent_item_get_type (void) G_GNUC_CONST;
++
++/* constructors */
++EggRecentItem * egg_recent_item_new (void);
++
++EggRecentItem * egg_recent_item_ref (EggRecentItem *item);
++EggRecentItem * 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);
++gchar * egg_recent_item_get_short_name (const EggRecentItem *item);
++
++void egg_recent_item_set_mime_type (EggRecentItem *item, const gchar *mime);
++gchar * egg_recent_item_get_mime_type (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 -urN ../gnome-desktop-2.12.2-pristine/libgnome-desktop/egg-recent-model-multi.c ./libgnome-desktop/egg-recent-model-multi.c
+--- ../gnome-desktop-2.12.2-pristine/libgnome-desktop/egg-recent-model-multi.c 1969-12-31 19:00:00.000000000 -0500
++++ ./libgnome-desktop/egg-recent-model-multi.c 2006-05-08 17:03:13.000000000 -0400
+@@ -0,0 +1,1990 @@
++/* -*- 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 at 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 <sys/stat.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-multi.h"
++#include "egg-recent-item.h"
++
++#define EGG_RECENT_MODEL_MULTI_DEFAULT_FILE_PATH ".recently-used"
++#define EGG_RECENT_MODEL_MULTI_BUFFER_SIZE 8192
++
++#define EGG_RECENT_MODEL_MULTI_MAX_ITEMS 500
++#define EGG_RECENT_MODEL_MULTI_DEFAULT_LIMIT 10
++#define EGG_RECENT_MODEL_MULTI_TIMEOUT_LENGTH 200
++#define EGG_RECENT_MODEL_MULTI_POLL_TIME 3
++
++/* needed for Darwin */
++#if !HAVE_DECL_LOCKF
++int lockf (int filedes, int function, off_t size);
++#endif
++
++#define EGG_RECENT_MODEL_MULTI_KEY_DIR "/desktop/gnome/recent_files"
++#define EGG_RECENT_MODEL_MULTI_DEFAULT_LIMIT_KEY EGG_RECENT_MODEL_MULTI_KEY_DIR "/default_limit"
++#define EGG_RECENT_MODEL_MULTI_EXPIRE_KEY EGG_RECENT_MODEL_MULTI_KEY_DIR "/expire"
++
++struct _EggRecentModelMultiPrivate {
++ 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 */
++
++ EggRecentModelMultiSort 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;
++
<<Diff was trimmed, longer than 597 lines>>
More information about the pld-cvs-commit
mailing list