diff options
author | maciag.artur <maciag.artur@0805d722-a2c2-11dd-9b86-41075523de00> | 2008-11-02 00:06:34 +0000 |
---|---|---|
committer | maciag.artur <maciag.artur@0805d722-a2c2-11dd-9b86-41075523de00> | 2008-11-02 00:06:34 +0000 |
commit | d81016d4baa9d5ce8d5ab5f050abb83edbc3dfa7 (patch) | |
tree | ad1f0c2502e499d46b457bd90419ccf86db34b2a /gnome-base | |
parent | git-svn-id: http://piczu-overlay.googlecode.com/svn/trunk@8 0805d722-a2c2-11d... (diff) | |
download | piczu-d81016d4baa9d5ce8d5ab5f050abb83edbc3dfa7.tar.gz piczu-d81016d4baa9d5ce8d5ab5f050abb83edbc3dfa7.tar.bz2 piczu-d81016d4baa9d5ce8d5ab5f050abb83edbc3dfa7.zip |
gnome-main-menu and depends
git-svn-id: http://piczu-overlay.googlecode.com/svn/trunk@9 0805d722-a2c2-11dd-9b86-41075523de00
Diffstat (limited to 'gnome-base')
39 files changed, 4096 insertions, 0 deletions
diff --git a/gnome-base/gnome-desktop/Manifest b/gnome-base/gnome-desktop/Manifest new file mode 100644 index 0000000..421f41e --- /dev/null +++ b/gnome-base/gnome-desktop/Manifest @@ -0,0 +1,15 @@ +AUX gnome-desktop-recently-used-apps.patch 64868 RMD160 02231803ef31044d88cd808bc61007c9195870ec SHA1 a2b7103ad56a584a1faa7d247ea2cd0dc201a4c8 SHA256 7f35d6549a3b1b48cac1223d76d4ef508e5f0e9dba7bc6ebe8c035f7d1c89885 +DIST gnome-desktop-2.18.1.tar.bz2 1265304 RMD160 f521135c8c60ab27febcb50daaaaed932ace9de1 SHA1 9a707f0ac97103e5464cb03fe14429754778563f SHA256 6c3ccd1804ca7d7119e3e16220bc6b4081b12e09808bbe642db402f2a45cd642 +DIST gnome-desktop-2.18.3.tar.bz2 1306654 RMD160 fb3cc9047ab4678607e9cae6cc18f0803b03ace3 SHA1 e466fb1619423d185772d0052562a2e66dc2e01e SHA256 8997a2ceca2dbb28fb402e23ea5f255b68c59ea4f932b253e2843bfe62af7c64 +DIST gnome-desktop-2.20.0.tar.bz2 1353685 RMD160 74cf96610e6fe81a964cc1487f26d2a5babf7600 SHA1 6bfb7a44d324f0d2a10d5185770e43bbc2378fc8 SHA256 363ecfe56738d840dcfa1333dc8401e63a253a21031b673ebd3df6ac722d58bf +DIST gnome-desktop-2.20.2.tar.bz2 1367184 RMD160 a2458129cb68f8d0c5f6f88894b98415d5d44719 SHA1 064751161705aa61fc456ed3ffadaa366dba3e9d SHA256 b9788e08b8a5be8305cb2ab5583497720e24f4f9d011561af6de75b6f6c68709 +DIST gnome-desktop-2.24.1.tar.bz2 1508429 RMD160 980538be5fb4ebeff0e66a89dc2a051f679b86af SHA1 d4b396df792c5bd1b496ff3e89949b1d4d2d048e SHA256 ec7beb0886dfaeebb506b2f0e6e255b4254b3ca812ab6f69a6cafb3d9e492a40 +EBUILD gnome-desktop-2.18.1-r1.ebuild 1355 RMD160 f9eba119a1a30918a9b725117e003d666be48c2f SHA1 ab7024b74aec2a81353bae192df44860d821a151 SHA256 b598b69331562442b7b3278e57dc6408e407039831833cf5976cdda097f8ad34 +EBUILD gnome-desktop-2.18.3.ebuild 1420 RMD160 533405c0fd685efefd66389e20f9ab6b1af96fa4 SHA1 ad587b992d0c10f707cd7bdbb61f425968e2e139 SHA256 f3bb95a681596244a236c325e5aed226d40ff9e34d3d45fa4be9ecdfe205373f +EBUILD gnome-desktop-2.20.0.ebuild 1334 RMD160 939a4c1b44cd05cc9e892e5496b8e3ac76eb6aa1 SHA1 8605ca2fbf0f080763b3e18f85358023c9f919f6 SHA256 3335c34046e893e9ac52c26bf3156ee461dd7911ac287a1ba5ba79a6ab344edb +EBUILD gnome-desktop-2.20.2.ebuild 1336 RMD160 127d3b893ae5d6acd8066d756a7e8650d0f3ec5d SHA1 b9ee149a5f14d26f288bb5f04506397d03f7c40f SHA256 60f27ec50a79366c979af08476d1c737d2ea373252dcaa43809ecf9d1e44932b +EBUILD gnome-desktop-2.24.1.ebuild 1119 RMD160 07bc34dc97aed8d5af06bade06178c676a6c05a3 SHA1 76b5538a532e37328557c83218657170051f885b SHA256 e32cdcb7bb8c3ca4245d541bbc72dead8a28e64a67804f9fcfeb181ae59d6f38 +MISC gnome-desktop-2.18.3.ebuild~ 1422 RMD160 0bca443d4d164fcd0896b20dd8730f6b9c2f8d77 SHA1 682adb3038d2fec048bf0be9d6f4d399e80b68b4 SHA256 7b1dd73109e0964e001e9198930a6a49987406c382bfc99c5d05ed98c36f2ebc +MISC gnome-desktop-2.20.0.ebuild~ 1250 RMD160 fdc2eba5a0191626e1a4784dbefa467c53ce9324 SHA1 ef3691bc36351d0a1cc5064622b1e9b6652d7289 SHA256 ddea26969d04849253b9a8a621228cbf23fe1a16305dcea515429b09449535bc +MISC gnome-desktop-2.20.2.ebuild~ 1334 RMD160 939a4c1b44cd05cc9e892e5496b8e3ac76eb6aa1 SHA1 8605ca2fbf0f080763b3e18f85358023c9f919f6 SHA256 3335c34046e893e9ac52c26bf3156ee461dd7911ac287a1ba5ba79a6ab344edb +MISC gnome-desktop-2.24.1.ebuild~ 1197 RMD160 ff1ca1568ccd46cdc3405dc14623b553b7b4fbfc SHA1 af302aafced42b66fccd53e2ef2caf9571d9aa66 SHA256 c1a11a97920a5dd43f5675cd3667f242fa0fc26f37a5b58c2b73675ab93716f8 diff --git a/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.18.1-r1 b/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.18.1-r1 new file mode 100644 index 0000000..36759cf --- /dev/null +++ b/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.18.1-r1 @@ -0,0 +1,3 @@ +MD5 a40df2ac6e73e38451f031ac99e9eb6e gnome-desktop-2.18.1.tar.bz2 1265304 +RMD160 f521135c8c60ab27febcb50daaaaed932ace9de1 gnome-desktop-2.18.1.tar.bz2 1265304 +SHA256 6c3ccd1804ca7d7119e3e16220bc6b4081b12e09808bbe642db402f2a45cd642 gnome-desktop-2.18.1.tar.bz2 1265304 diff --git a/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.18.3 b/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.18.3 new file mode 100644 index 0000000..03046f1 --- /dev/null +++ b/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.18.3 @@ -0,0 +1,3 @@ +MD5 98de3b7d0da690da8b94cddc74f3914b gnome-desktop-2.18.3.tar.bz2 1306654 +RMD160 fb3cc9047ab4678607e9cae6cc18f0803b03ace3 gnome-desktop-2.18.3.tar.bz2 1306654 +SHA256 8997a2ceca2dbb28fb402e23ea5f255b68c59ea4f932b253e2843bfe62af7c64 gnome-desktop-2.18.3.tar.bz2 1306654 diff --git a/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.20.0 b/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.20.0 new file mode 100644 index 0000000..ccc98d2 --- /dev/null +++ b/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.20.0 @@ -0,0 +1,3 @@ +MD5 530244e27a4a2426f833561c4b573a42 gnome-desktop-2.20.0.tar.bz2 1353685 +RMD160 74cf96610e6fe81a964cc1487f26d2a5babf7600 gnome-desktop-2.20.0.tar.bz2 1353685 +SHA256 363ecfe56738d840dcfa1333dc8401e63a253a21031b673ebd3df6ac722d58bf gnome-desktop-2.20.0.tar.bz2 1353685 diff --git a/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.20.2 b/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.20.2 new file mode 100644 index 0000000..3166a43 --- /dev/null +++ b/gnome-base/gnome-desktop/files/digest-gnome-desktop-2.20.2 @@ -0,0 +1,3 @@ +MD5 fa6bfd95606a34fb381a233082ddd5ac gnome-desktop-2.20.2.tar.bz2 1367184 +RMD160 a2458129cb68f8d0c5f6f88894b98415d5d44719 gnome-desktop-2.20.2.tar.bz2 1367184 +SHA256 b9788e08b8a5be8305cb2ab5583497720e24f4f9d011561af6de75b6f6c68709 gnome-desktop-2.20.2.tar.bz2 1367184 diff --git a/gnome-base/gnome-desktop/files/gnome-desktop-recently-used-apps.patch b/gnome-base/gnome-desktop/files/gnome-desktop-recently-used-apps.patch new file mode 100644 index 0000000..23d3881 --- /dev/null +++ b/gnome-base/gnome-desktop/files/gnome-desktop-recently-used-apps.patch @@ -0,0 +1,2701 @@ +diff -uprN gnome-desktop-2.16.1-pristine/libgnome-desktop/Makefile.am gnome-desktop-2.16.1/libgnome-desktop/Makefile.am +--- gnome-desktop-2.16.1-pristine/libgnome-desktop/Makefile.am 2006-06-04 07:53:09.000000000 -0400 ++++ gnome-desktop-2.16.1/libgnome-desktop/Makefile.am 2006-10-23 16:19:45.000000000 -0400 +@@ -17,9 +17,13 @@ lib_LTLIBRARIES = libgnome-desktop-2.la + + noinst_PROGRAMS = test-ditem test-hint test-ditem-edit + +-libgnome_desktop_2_la_SOURCES = \ +- gnome-desktop-item.c \ +- gnome-ditem-edit.c \ ++libgnome_desktop_2_la_SOURCES = \ ++ gnome-desktop-item.c \ ++ gnome-ditem-edit.c \ ++ egg-recent-item.h \ ++ egg-recent-item.c \ ++ egg-recent-model.h \ ++ egg-recent-model.c \ + gnome-hint.c + + libgnome_desktop_2_la_LIBADD = \ +diff -uprN gnome-desktop-2.16.1-pristine/libgnome-desktop/egg-recent-item.c gnome-desktop-2.16.1/libgnome-desktop/egg-recent-item.c +--- gnome-desktop-2.16.1-pristine/libgnome-desktop/egg-recent-item.c 1969-12-31 19:00:00.000000000 -0500 ++++ gnome-desktop-2.16.1/libgnome-desktop/egg-recent-item.c 2006-10-23 16:19:45.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@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 -uprN gnome-desktop-2.16.1-pristine/libgnome-desktop/egg-recent-item.h gnome-desktop-2.16.1/libgnome-desktop/egg-recent-item.h +--- gnome-desktop-2.16.1-pristine/libgnome-desktop/egg-recent-item.h 1969-12-31 19:00:00.000000000 -0500 ++++ gnome-desktop-2.16.1/libgnome-desktop/egg-recent-item.h 2006-10-23 16:19:45.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 -uprN gnome-desktop-2.16.1-pristine/libgnome-desktop/egg-recent-model.c gnome-desktop-2.16.1/libgnome-desktop/egg-recent-model.c +--- gnome-desktop-2.16.1-pristine/libgnome-desktop/egg-recent-model.c 1969-12-31 19:00:00.000000000 -0500 ++++ gnome-desktop-2.16.1/libgnome-desktop/egg-recent-model.c 2006-10-23 16:19:45.000000000 -0400 +@@ -0,0 +1,1965 @@ ++/* -*- 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 <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> ++ ++#define EGG_ENABLE_RECENT_FILES ++#include "egg-recent-model.h" ++#include "egg-recent-item.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_POLL_TIME 3 ++ ++/* needed for Darwin */ ++#if !HAVE_DECL_LOCKF ++int lockf (int filedes, int function, off_t size); ++#endif ++ ++#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; ++ guint poll_timeout; ++ time_t last_mtime; ++}; ++ ++/* 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 { ++ 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}; ++ ++static GObjectClass *parent_class; ++ ++static void egg_recent_model_clear_mime_filter (EggRecentModel *model); ++static void egg_recent_model_clear_group_filter (EggRecentModel *model); ++static void egg_recent_model_clear_scheme_filter (EggRecentModel *model); ++ ++static GObjectClass *parent_class; ++ ++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; ++ ++#ifndef G_OS_WIN32 ++ fsync (fd); ++#endif ++ 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 (gnome_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 (NULL); ++ while (fgets (buf, EGG_RECENT_MODEL_BUFFER_SIZE, file)) { ++ string = g_string_append (string, buf); ++ } ++ ++ rewind (file); ++ ++ return g_string_free (string, FALSE); ++} ++ ++ ++ ++static ParseInfo * ++parse_info_init (void) ++{ ++ ParseInfo *retval; ++ ++ retval = g_new0 (ParseInfo, 1); ++ retval->states = g_slist_prepend (NULL, STATE_START); ++ retval->items = NULL; ++ ++ return retval; ++} ++ ++static void ++parse_info_free (ParseInfo *info) ++{ ++ g_slist_free (info->states); ++ g_free (info); ++} ++ ++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 gboolean ++valid_element (ParseInfo *info, ++ int valid_parent_state, ++ const gchar *element_name, ++ const gchar *valid_element, ++ GError **error) ++{ ++ if (peek_state (info) != valid_parent_state) { ++ g_set_error (error, ++ G_MARKUP_ERROR, ++ G_MARKUP_ERROR_INVALID_CONTENT, ++ "Unexpected tag '%s', tag '%s' expected", ++ element_name, valid_element); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++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)) { ++ if (valid_element (info, STATE_RECENT_FILES, ++ TAG_RECENT_ITEM, TAG_RECENT_FILES, error)) { ++ info->current_item = egg_recent_item_new (); ++ push_state (info, STATE_RECENT_ITEM); ++ } ++ } else if (ELEMENT_IS (TAG_URI)) { ++ if (valid_element (info, STATE_RECENT_ITEM, ++ TAG_URI, TAG_RECENT_ITEM, error)) { ++ push_state (info, STATE_URI); ++ } ++ } else if (ELEMENT_IS (TAG_MIME_TYPE)) { ++ if (valid_element (info, STATE_RECENT_ITEM, ++ TAG_MIME_TYPE, TAG_RECENT_ITEM, error)) { ++ push_state (info, STATE_MIME_TYPE); ++ } ++ } else if (ELEMENT_IS (TAG_TIMESTAMP)) { ++ if (valid_element (info, STATE_RECENT_ITEM, ++ TAG_TIMESTAMP, TAG_RECENT_ITEM, error)) { ++ push_state (info, STATE_TIMESTAMP); ++ } ++ } else if (ELEMENT_IS (TAG_PRIVATE)) { ++ if (valid_element (info, STATE_RECENT_ITEM, ++ TAG_PRIVATE, TAG_RECENT_ITEM, error)) { ++ push_state (info, STATE_PRIVATE); ++ egg_recent_item_set_private (info->current_item, TRUE); ++ } ++ } else if (ELEMENT_IS (TAG_GROUPS)) { ++ if (valid_element (info, STATE_RECENT_ITEM, ++ TAG_GROUPS, TAG_RECENT_ITEM, error)) { ++ push_state (info, STATE_GROUPS); ++ } ++ } else if (ELEMENT_IS (TAG_GROUP)) { ++ if (valid_element (info, STATE_GROUPS, ++ TAG_GROUP, TAG_GROUPS, error)) { ++ 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: ++ if (!info->current_item) { ++ g_warning ("No recent item found\n"); ++ break; ++ } ++ ++ if (!info->current_item->uri) { ++ g_warning ("Invalid item found\n"); ++ break; ++ } ++ ++ info->items = g_list_prepend (info->items, ++ info->current_item); ++ info->current_item = NULL; ++ 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; ++ gchar *value; ++ ++ value = g_strndup (text, text_len); ++ ++ 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, value); ++ break; ++ case STATE_MIME_TYPE: ++ egg_recent_item_set_mime_type (info->current_item, value); ++ break; ++ case STATE_TIMESTAMP: ++ egg_recent_item_set_timestamp (info->current_item, ++ (time_t)atoi (value)); ++ break; ++ case STATE_GROUP: ++ egg_recent_item_add_group (info->current_item, ++ text); ++ break; ++ } ++ ++ g_free (value); ++} ++ ++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) ++{ ++ GList *newlist = NULL; ++ GList *l; ++ gchar *mime_type; ++ gchar *uri; ++ ++ g_return_val_if_fail (list != NULL, NULL); ++ ++ for (l = list; l != NULL ; l = l->next) { ++ EggRecentItem *item = (EggRecentItem *) l->data; ++ gboolean pass_mime_test = FALSE; ++ gboolean pass_group_test = FALSE; ++ gboolean pass_scheme_test = FALSE; ++ ++ g_assert (item != NULL); ++ ++ 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 = gnome_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); ++ else ++ egg_recent_item_unref (item); ++ ++ g_free (uri); ++ } ++ ++ g_list_free (list); ++ ++ return g_list_reverse (newlist); ++} ++ ++ ++ ++#if 0 ++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); ++ } ++} ++#endif ++ ++ ++static gboolean ++egg_recent_model_changed_timeout (EggRecentModel *model) ++{ ++ model->priv->changed_timeout = 0; ++ ++ 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 || ++ event_type == GNOME_VFS_MONITOR_EVENT_CREATED || ++ event_type == GNOME_VFS_MONITOR_EVENT_DELETED) { ++ 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 gboolean ++egg_recent_model_poll_timeout (gpointer user_data) ++{ ++ EggRecentModel *model; ++ struct stat stat_buf; ++ int stat_res; ++ ++ model = EGG_RECENT_MODEL (user_data); ++ stat_res = stat (model->priv->path, &stat_buf); ++ ++ if (!stat_res && stat_buf.st_mtime && ++ stat_buf.st_mtime != model->priv->last_mtime) { ++ model->priv->last_mtime = stat_buf.st_mtime; ++ ++ 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); ++ } ++ return TRUE; ++} ++ ++static void ++egg_recent_model_monitor (EggRecentModel *model, gboolean should_monitor) ++{ ++ if (should_monitor && model->priv->monitor == NULL) { ++ char *uri; ++ GnomeVFSResult result; ++ ++ uri = gnome_vfs_get_uri_from_local_path (model->priv->path); ++ ++ result = gnome_vfs_monitor_add (&model->priv->monitor, ++ uri, ++ GNOME_VFS_MONITOR_FILE, ++ egg_recent_model_monitor_cb, ++ model); ++ ++ g_free (uri); ++ ++ /* if the above fails, don't worry about it. ++ * local notifications will still happen ++ */ ++ if (result == GNOME_VFS_ERROR_NOT_SUPPORTED) { ++ if (model->priv->poll_timeout > 0) ++ g_source_remove (model->priv->poll_timeout); ++ ++ model->priv->poll_timeout = g_timeout_add ( ++ EGG_RECENT_MODEL_POLL_TIME * 1000, ++ egg_recent_model_poll_timeout, ++ model); ++ } ++ ++ } 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) { ++ g_free (content); ++ return NULL; ++ } ++ ++ info = parse_info_init (); ++ ++ 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 while parsing the .recently-used file: %s\n", ++ error->message); ++ ++ g_error_free (error); ++ parse_info_free (info); ++ ++ return NULL; ++ } ++ ++ error = NULL; ++ if (!g_markup_parse_context_end_parse (ctx, &error)) { ++ g_warning ("Unable to complete parsing of the .recently-used file: %s\n", ++ error->message); ++ ++ g_error_free (error); ++ g_markup_parse_context_free (ctx); ++ parse_info_free (info); ++ ++ return NULL; ++ } ++ ++ list = g_list_reverse (info->items); ++ ++ g_markup_parse_context_free (ctx); ++ parse_info_free (info); ++ g_free (content); ++ ++ 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_utf8 (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, ++ gboolean for_writing) ++{ ++ FILE *file; ++ mode_t prev_umask; ++ ++ file = fopen (model->priv->path, "r+"); ++ if (file == NULL && for_writing) { ++ /* be paranoid */ ++ prev_umask = umask (077); ++ ++ file = fopen (model->priv->path, "w+"); ++ ++ umask (prev_umask); ++ ++ g_return_val_if_fail (file != NULL, NULL); ++ } ++ ++ return file; ++} ++ ++static gboolean ++egg_recent_model_lock_file (FILE *file) ++{ ++#ifdef HAVE_LOCKF ++ int fd; ++ gint try = 5; ++ ++ rewind (file); ++ fd = fileno (file); ++ ++ /* Attempt to lock the file 5 times, ++ * waiting a random interval (< 1 second) ++ * in between attempts. ++ * We should really be doing asynchronous ++ * locking, but requires substantially larger ++ * changes. ++ */ ++ ++ while (try > 0) ++ { ++ int rand_interval; ++ ++ if (lockf (fd, F_TLOCK, 0) == 0) ++ return TRUE; ++ ++ rand_interval = 1 + (int) (10.0 * rand()/(RAND_MAX + 1.0)); ++ ++ g_usleep (100000 * rand_interval); ++ ++ --try; ++ } ++ ++ return FALSE; ++#else ++ return TRUE; ++#endif /* HAVE_LOCKF */ ++} ++ ++static gboolean ++egg_recent_model_unlock_file (FILE *file) ++{ ++#ifdef HAVE_LOCKF ++ int fd; ++ ++ rewind (file); ++ fd = fileno (file); ++ ++ return (lockf (fd, F_ULOCK, 0) == 0) ? TRUE : FALSE; ++#else ++ return TRUE; ++#endif /* HAVE_LOCKF */ ++} ++ ++static void ++egg_recent_model_finalize (GObject *object) ++{ ++ EggRecentModel *model = EGG_RECENT_MODEL (object); ++ ++ if (model->priv->changed_timeout > 0) { ++ g_source_remove (model->priv->changed_timeout); ++ } ++ ++ 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; ++ ++ if (model->priv->poll_timeout > 0) ++ g_source_remove (model->priv->poll_timeout); ++ model->priv->poll_timeout =0; ++ ++ g_free (model->priv); ++ ++ parent_class->finalize (object); ++} ++ ++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: ++ if (model->priv->mime_filter_values != NULL) ++ egg_recent_model_clear_mime_filter (model); ++ ++ model->priv->mime_filter_values = ++ (GSList *)g_value_get_pointer (value); ++ break; ++ ++ case PROP_GROUP_FILTERS: ++ if (model->priv->group_filter_values != NULL) ++ egg_recent_model_clear_group_filter (model); ++ ++ model->priv->group_filter_values = ++ (GSList *)g_value_get_pointer (value); ++ break; ++ ++ case PROP_SCHEME_FILTERS: ++ if (model->priv->scheme_filter_values != NULL) ++ egg_recent_model_clear_scheme_filter (model); ++ ++ 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; ++ ++ parent_class = g_type_class_peek_parent (klass); ++ ++ parent_class = g_type_class_peek_parent (klass); ++ ++ 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; ++ model->priv->poll_timeout = 0; ++ model->priv->last_mtime = 0; ++ 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; ++ char *uri; ++ time_t t; ++ ++ g_return_val_if_fail (model != NULL, FALSE); ++ g_return_val_if_fail (EGG_IS_RECENT_MODEL (model), FALSE); ++ ++ uri = egg_recent_item_get_uri (item); ++ if (strncmp (uri, "recent-files://", strlen ("recent-files://")) == 0) { ++ g_free (uri); ++ return FALSE; ++ } else { ++ g_free (uri); ++ } ++ ++ file = egg_recent_model_open_file (model, TRUE); ++ g_return_val_if_fail (file != NULL, FALSE); ++ ++ time (&t); ++ egg_recent_item_set_timestamp (item, t); ++ ++ 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)); ++ fclose (file); ++ 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, TRUE); ++ 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, FALSE); ++ if (file == NULL) ++ return NULL; ++ ++ if (egg_recent_model_lock_file (file)) ++ list = egg_recent_model_read (model, file); ++ else { ++ g_warning ("Failed to lock: %s", strerror (errno)); ++ fclose (file); ++ return NULL; ++ } ++ ++ 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, TRUE); ++ 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); ++ ++ if (model->priv->monitor == NULL) { ++ /* since monitoring isn't working, at least give a ++ * local notification ++ */ ++ egg_recent_model_changed (model); ++ } ++} ++ ++static void ++egg_recent_model_clear_mime_filter (EggRecentModel *model) ++{ ++ 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; ++ } ++} ++ ++/** ++ * 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); ++ ++ egg_recent_model_clear_mime_filter (model); ++ ++ 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; ++} ++ ++static void ++egg_recent_model_clear_group_filter (EggRecentModel *model) ++{ ++ 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; ++ } ++} ++ ++/** ++ * 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); ++ ++ egg_recent_model_clear_group_filter (model); ++ ++ 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; ++} ++ ++static void ++egg_recent_model_clear_scheme_filter (EggRecentModel *model) ++{ ++ 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; ++ } ++} ++ ++/** ++ * 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); ++ ++ egg_recent_model_clear_scheme_filter (model); ++ ++ 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 (¤t_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, FALSE); ++ if (file == NULL) ++ return; ++ ++ 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 -uprN gnome-desktop-2.16.1-pristine/libgnome-desktop/egg-recent-model.h gnome-desktop-2.16.1/libgnome-desktop/egg-recent-model.h +--- gnome-desktop-2.16.1-pristine/libgnome-desktop/egg-recent-model.h 1969-12-31 19:00:00.000000000 -0500 ++++ gnome-desktop-2.16.1/libgnome-desktop/egg-recent-model.h 2006-10-23 16:19:45.000000000 -0400 +@@ -0,0 +1,84 @@ ++/* 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" ++ ++#ifndef EGG_ENABLE_RECENT_FILES ++#error "EggRecent has been DEPRECATED by the new recent files code inside GTK 2.9.0. Use EGG_ENABLE_RECENT_FILES to compile this code, but you are using it at your own risk." ++#endif ++ ++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 -uprN gnome-desktop-2.16.1-pristine/libgnome-desktop/gnome-desktop-item.c gnome-desktop-2.16.1/libgnome-desktop/gnome-desktop-item.c +--- gnome-desktop-2.16.1-pristine/libgnome-desktop/gnome-desktop-item.c 2006-08-05 07:59:08.000000000 -0400 ++++ gnome-desktop-2.16.1/libgnome-desktop/gnome-desktop-item.c 2006-10-23 17:15:41.000000000 -0400 +@@ -59,6 +59,16 @@ + #include <gtk/gtk.h> + #endif + ++#include <gtk/gtkversion.h> ++#if GTK_CHECK_VERSION (2,10,0) ++# define USE_GTK_RECENT_MANAGER ++# include <gtk/gtkrecentmanager.h> ++#else ++# include "egg-recent-item.h" ++# define EGG_ENABLE_RECENT_FILES ++# include "egg-recent-model.h" ++#endif ++ + #define sure_string(s) ((s)!=NULL?(s):"") + + struct _GnomeDesktopItem { +@@ -128,6 +138,8 @@ static gboolean ditem_save (Gno + const char *uri, + GError **error); + ++static void update_recently_used_apps (const GnomeDesktopItem *item); ++ + static int + readbuf_getc (ReadBuf *rb) + { +@@ -2103,6 +2115,8 @@ gnome_desktop_item_launch_on_screen_with + (flags & GNOME_DESKTOP_ITEM_LAUNCH_APPEND_PATHS), + error); + ++ update_recently_used_apps (item); ++ + return ret; + } + +@@ -4098,3 +4112,71 @@ gnome_desktop_item_error_quark (void) + + return q; + } ++ ++static void ++update_recently_used_apps (const GnomeDesktopItem *item) ++{ ++#ifdef USE_GTK_RECENT_MANAGER ++ GtkRecentManager *manager; ++ GtkRecentData recent_data; ++#else ++ EggRecentModel *model; ++ EggRecentItem *recent_item; ++#endif ++ ++ ++ if (! item) ++ return; ++ ++#ifdef USE_GTK_RECENT_MANAGER ++ manager = gtk_recent_manager_get_default (); ++ ++ if (! manager) ++ return; ++ ++ recent_data.display_name = NULL; ++ recent_data.description = NULL; ++ recent_data.mime_type = g_strdup ("application/x-desktop"); ++ recent_data.is_private = TRUE; ++ ++ recent_data.app_name = g_strdup (g_get_application_name ()); ++ if (! recent_data.app_name) ++ recent_data.app_name = g_strdup ("libgnomedesktop"); ++ ++ recent_data.app_exec = g_strdup (gnome_desktop_item_get_string (item, GNOME_DESKTOP_ITEM_EXEC)); ++ if (! recent_data.app_exec) ++ recent_data.app_exec = g_strdup ("gnome-open %u"); ++ ++ recent_data.groups = g_new0 (gchar *, 2); ++ recent_data.groups [0] = g_strdup ("recently-used-apps"); ++ recent_data.groups [1] = NULL; ++ ++ gtk_recent_manager_add_full (manager, gnome_desktop_item_get_location (item), & recent_data); ++ ++ g_free (recent_data.mime_type); ++ g_free (recent_data.app_name); ++ g_free (recent_data.app_exec); ++ g_free (recent_data.groups [0]); ++ g_free (recent_data.groups); ++ ++#else ++ ++ model = egg_recent_model_new (EGG_RECENT_MODEL_SORT_MRU); ++ ++ if (! model) ++ return; ++ ++ recent_item = egg_recent_item_new_from_uri (gnome_desktop_item_get_location (item)); ++ ++ if (recent_item) { ++ egg_recent_item_add_group (recent_item, "recently-used-apps"); ++ egg_recent_item_set_private (recent_item, TRUE); ++ ++ egg_recent_model_add_full (model, recent_item); ++ ++ egg_recent_item_unref (recent_item); ++ } ++ ++ g_object_unref (G_OBJECT (model)); ++#endif ++} diff --git a/gnome-base/gnome-desktop/gnome-desktop-2.18.1-r1.ebuild b/gnome-base/gnome-desktop/gnome-desktop-2.18.1-r1.ebuild new file mode 100644 index 0000000..7790fd1 --- /dev/null +++ b/gnome-base/gnome-desktop/gnome-desktop-2.18.1-r1.ebuild @@ -0,0 +1,48 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-desktop/gnome-desktop-2.18.1.ebuild,v 1.1 2007/04/17 02:58:08 compnerd Exp $ + +inherit eutils gnome2 + +DESCRIPTION="Libraries for the gnome desktop that is not part of the UI" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd" +IUSE="doc" + +RDEPEND=">=dev-libs/libxml2-2.4.20 + >=x11-libs/gtk+-2.8 + >=dev-libs/glib-2.8 + >=gnome-base/libgnomecanvas-2 + >=gnome-base/libgnomeui-2.6 + >=gnome-base/gnome-vfs-2 + >=x11-libs/startup-notification-0.5 + !gnome-base/gnome-core" +DEPEND="${RDEPEND} + app-text/scrollkeeper + sys-devel/gettext + >=dev-util/intltool-0.35 + >=dev-util/pkgconfig-0.9 + >=app-text/gnome-doc-utils-0.3.2 + doc? ( >=dev-util/gtk-doc-1.4 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="${G2CONF} --with-gnome-distributor=Gentoo --disable-scrollkeeper" +} + +src_unpack() { + gnome2_src_unpack + + epatch ${FILESDIR}/gnome-desktop-recently-used-apps.patch + + # Fix bug 16853 by building gnome-about with IEEE to prevent + # floating point exceptions on alpha + if use alpha; then + sed -i '/^CFLAGS/s/$/ -mieee/' ${S}/gnome-about/Makefile.in \ + || die "sed failed (2)" + fi +} diff --git a/gnome-base/gnome-desktop/gnome-desktop-2.18.3.ebuild b/gnome-base/gnome-desktop/gnome-desktop-2.18.3.ebuild new file mode 100644 index 0000000..86d163b --- /dev/null +++ b/gnome-base/gnome-desktop/gnome-desktop-2.18.3.ebuild @@ -0,0 +1,51 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-desktop/gnome-desktop-2.18.3.ebuild,v 1.5 2007/09/22 14:50:42 dertobi123 Exp $ + +inherit eutils gnome2 + +DESCRIPTION="Libraries for the gnome desktop that is not part of the UI" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="~alpha amd64 ~arm ~hppa ~ia64 ppc ppc64 ~sh ~sparc x86 ~x86-fbsd" +IUSE="doc slab" + +RDEPEND=">=dev-libs/libxml2-2.4.20 + >=x11-libs/gtk+-2.8 + >=dev-libs/glib-2.8 + >=gnome-base/libgnomecanvas-2 + >=gnome-base/libgnomeui-2.6 + >=gnome-base/gnome-vfs-2 + >=x11-libs/startup-notification-0.5 + !gnome-base/gnome-core + slab? ( gnome-base/gnome-main-menu )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + sys-devel/gettext + >=dev-util/intltool-0.35 + >=dev-util/pkgconfig-0.9 + >=app-text/gnome-doc-utils-0.3.2 + doc? ( >=dev-util/gtk-doc-1.4 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="${G2CONF} --with-gnome-distributor=Gentoo --disable-scrollkeeper" +} + +src_unpack() { + gnome2_src_unpack + + if use slab; then + epatch ${FILESDIR}/gnome-desktop-recently-used-apps.patch + fi + + # Fix bug 16853 by building gnome-about with IEEE to prevent + # floating point exceptions on alpha + if use alpha; then + sed -i '/^CFLAGS/s/$/ -mieee/' ${S}/gnome-about/Makefile.in \ + || die "sed failed (2)" + fi +} diff --git a/gnome-base/gnome-desktop/gnome-desktop-2.20.0.ebuild b/gnome-base/gnome-desktop/gnome-desktop-2.20.0.ebuild new file mode 100644 index 0000000..f70dc82 --- /dev/null +++ b/gnome-base/gnome-desktop/gnome-desktop-2.20.0.ebuild @@ -0,0 +1,52 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +inherit eutils gnome2 + +DESCRIPTION="Libraries for the gnome desktop that is not part of the UI" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd" +IUSE="doc slab" + +RDEPEND=">=dev-libs/libxml2-2.4.20 + >=x11-libs/gtk+-2.11.3 + >=dev-libs/glib-2.13.0 + >=gnome-base/gconf-2 + >=gnome-base/libgnomecanvas-2 + >=gnome-base/libgnomeui-2.6 + >=gnome-base/gnome-vfs-2 + >=x11-libs/startup-notification-0.5 + !gnome-base/gnome-core + slab? ( gnome-base/gnome-main-menu )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + sys-devel/gettext + >=dev-util/intltool-0.35 + >=dev-util/pkgconfig-0.9 + >=app-text/gnome-doc-utils-0.3.2 + doc? ( >=dev-util/gtk-doc-1.4 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="${G2CONF} --with-gnome-distributor=Gentoo --disable-scrollkeeper" +} + +src_unpack() { + gnome2_src_unpack + + if use slab; then + epatch ${FILESDIR}/gnome-desktop-recently-used-apps.patch + fi + + # Fix bug 16853 by building gnome-about with IEEE to prevent + # floating point exceptions on alpha + if use alpha; then + sed -i '/^CFLAGS/s/$/ -mieee/' ${S}/gnome-about/Makefile.in \ + || die "sed failed (2)" + fi +} diff --git a/gnome-base/gnome-desktop/gnome-desktop-2.20.2.ebuild b/gnome-base/gnome-desktop/gnome-desktop-2.20.2.ebuild new file mode 100644 index 0000000..19cd83d --- /dev/null +++ b/gnome-base/gnome-desktop/gnome-desktop-2.20.2.ebuild @@ -0,0 +1,52 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +inherit eutils gnome2 + +DESCRIPTION="Libraries for the gnome desktop that is not part of the UI" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd" +IUSE="doc slab" + +RDEPEND=">=dev-libs/libxml2-2.4.20 + >=x11-libs/gtk+-2.11.3 + >=dev-libs/glib-2.13.0 + >=gnome-base/gconf-2 + >=gnome-base/libgnomecanvas-2 + >=gnome-base/libgnomeui-2.6 + >=gnome-base/gnome-vfs-2 + >=x11-libs/startup-notification-0.5 + !gnome-base/gnome-core + slab? ( gnome-base/gnome-main-menu )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + sys-devel/gettext + >=dev-util/intltool-0.35 + >=dev-util/pkgconfig-0.9 + >=app-text/gnome-doc-utils-0.3.2 + doc? ( >=dev-util/gtk-doc-1.4 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="${G2CONF} --with-gnome-distributor=Gentoo --disable-scrollkeeper" +} + +src_unpack() { + gnome2_src_unpack + + if use slab; then + epatch ${FILESDIR}/gnome-desktop-recently-used-apps.patch + fi + + # Fix bug 16853 by building gnome-about with IEEE to prevent + # floating point exceptions on alpha + if use alpha; then + sed -i '/^CFLAGS/s/$/ -mieee/' "${S}"/gnome-about/Makefile.in \ + || die "sed failed (2)" + fi +} diff --git a/gnome-base/gnome-desktop/gnome-desktop-2.24.1.ebuild b/gnome-base/gnome-desktop/gnome-desktop-2.24.1.ebuild new file mode 100644 index 0000000..b8361c8 --- /dev/null +++ b/gnome-base/gnome-desktop/gnome-desktop-2.24.1.ebuild @@ -0,0 +1,45 @@ +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: Exp $ + +inherit gnome2 + +DESCRIPTION="Libraries for the gnome desktop that are not part of the UI" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd" +IUSE="slab doc" + +RDEPEND=">=dev-libs/libxml2-2.4.20 + >=x11-libs/gtk+-2.11.3 + >=dev-libs/glib-2.15.4 + >=x11-libs/libXrandr-1.2 + >=gnome-base/gconf-2 + >=gnome-base/libgnomeui-2.6 + >=x11-libs/startup-notification-0.5" +DEPEND="${RDEPEND} + app-text/scrollkeeper + >=dev-util/intltool-0.40 + >=dev-util/pkgconfig-0.9 + >=app-text/gnome-doc-utils-0.3.2 + doc? ( >=dev-util/gtk-doc-1.4 ) + slab? ( gnome-base/gnome-main-menu ) + ~app-text/docbook-xml-dtd-4.1.2 + x11-proto/xproto" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="${G2CONF} --with-gnome-distributor=Gentoo --disable-scrollkeeper" +} + +src_unpack() { + gnome2_src_unpack + + use slab && epatch "${FILESDIR}"/gnome-desktop-recently-used-apps.patch + + eautoreconf +} + diff --git a/gnome-base/gnome-main-menu/Manifest b/gnome-base/gnome-main-menu/Manifest new file mode 100644 index 0000000..24b064f --- /dev/null +++ b/gnome-base/gnome-main-menu/Manifest @@ -0,0 +1,12 @@ +AUX 01-gnome-main-menu-autogen-noconfigure.patch 311 RMD160 95677c7e1b9ad70da4ed522e9698d9dfd73aa9a7 SHA1 3618e177a75d946c8ad790d2b47d18201bebc422 SHA256 2344463ea54327c2825329fe10bc574785ab022e8baebff247307d758efc5ace +AUX 02-configure.in-remove-gtk-doc.patch 294 RMD160 f8b9ce6278f571100fed70ecc81fe90138684d66 SHA1 98a38d24d77d22cae147ce4ccb9613227cede22e SHA256 7cc166e363984001656f253848b31ac20322e11762d92efffc604393792c9f09 +AUX 03-tracker-search.patch 714 RMD160 daa5b0e6d26930edc0c53394e99286dd761b4021 SHA1 9faf44d33f002d5ebdbb93b212c6f429d933d83c SHA256 7c9477a924f30c0a869b8232b6f6b575a614d02f046c52896ef75468558d571f +AUX 04-disable-search.patch 595 RMD160 6d50cf4442e34119909e47a11157d985a098681d SHA1 2e51810689bee5b69b13276c3bec3810418b7b4c SHA256 b901cdd617380c3024b7f8c8aaedfd3e84115ede27ff33ec67c427f9a692eced +AUX gnome-main-menu-gentooifications.patch 1577 RMD160 15bc812e3847d85b541ad6ea3c76b1332251eca1 SHA1 17b899827f460d75f11f9776026189bd31043e98 SHA256 9770fbdf849bc9462c6b2f63879895c477d00950984a6668220459bcfec5dba2 +AUX gnome-main-menu-gentooifications.patch~ 1128 RMD160 76a34e92f3f0bde39639028ea019518ee240634e SHA1 a37f9d71a0a93012120d37678fc391b21948fe0e SHA256 1df9cc635b058416c956c5f3c4d7b48ec82e9e6386552e8af5ee6359e7587516 +AUX gnome-main-menu-shutdown-add.patch 1243 RMD160 6e46d2af5d157c7c83f5255133115ea424ca1c5c SHA1 e7ad0e17670d5ed01e690ca06b1a9750720aff18 SHA256 d2dd99e9b9e3b260ada980e1c11bc42405f9928454066335ea70bd70ccd2b9e1 +AUX gnome-main-menu-shutdown-add.patch~ 756 RMD160 9b8daaf622be64120ffe9fc881c80a3579a002fd SHA1 04fbfc159b1b20b537dd5d9033faa2185984593a SHA256 177f52e034221f494f948474a25488ad2a579a88bb16eb8f4d7a0928c03feffa +AUX gnome-session-shutdown.desktop 245 RMD160 896aed8e30687a95b7ab71fd8bef5c93c2683f5e SHA1 a2f6d7419847a19ca51ee0b5dea5eddcc7d33de2 SHA256 b085dbd59997c5f92cdcdfe741fc67048261c4260f61ab254bd202ea7eff5aca +EBUILD gnome-main-menu-0.9.10.ebuild 2007 RMD160 f7b51e35b8a0cbc72d6567bb857688842a9b3d5d SHA1 1b96f8a0982cf3732497d464490eca304e60de94 SHA256 9e49c2b292a0f1fefe1214ef7819d9a6cf2a7b26f6ef4a1d666b9de881a0881f +EBUILD gnome-main-menu-9999.ebuild 2253 RMD160 451adb71eac9d1ad56e16915d4df75d7d5cb4bfb SHA1 cf4a903ebb03728b9c643d80cac9e7a1e04097e3 SHA256 06f65e0677993d7fea29892ec65e1364eaa7caba9dd7874741c94e3698278c9a +MISC gnome-main-menu-9999.ebuild~ 2252 RMD160 225a97894f974164b6ab4796d265e40931ee16d3 SHA1 249c2d96a75ed9e43c744815fafe00010418f23a SHA256 a80f17b5bdc7763cbb978f245e5f2170a9839401600f04c66661bd83edf68176 diff --git a/gnome-base/gnome-main-menu/files/01-gnome-main-menu-autogen-noconfigure.patch b/gnome-base/gnome-main-menu/files/01-gnome-main-menu-autogen-noconfigure.patch new file mode 100644 index 0000000..5e5bff6 --- /dev/null +++ b/gnome-base/gnome-main-menu/files/01-gnome-main-menu-autogen-noconfigure.patch @@ -0,0 +1,9 @@ +diff -ru slab-orig/autogen.sh slab/autogen.sh +--- slab-orig/autogen.sh 2006-07-31 23:01:39.910532952 -0600 ++++ slab/autogen.sh 2006-07-31 23:04:12.209380008 -0600 +@@ -23,4 +23,4 @@ + exit 1 + fi + +-REQUIRED_AUTOMAKE_VERSION=1.9 . gnome-autogen.sh ++REQUIRED_AUTOMAKE_VERSION=1.9 NOCONFIGURE=1 . gnome-autogen.sh diff --git a/gnome-base/gnome-main-menu/files/02-configure.in-remove-gtk-doc.patch b/gnome-base/gnome-main-menu/files/02-configure.in-remove-gtk-doc.patch new file mode 100644 index 0000000..d0a8768 --- /dev/null +++ b/gnome-base/gnome-main-menu/files/02-configure.in-remove-gtk-doc.patch @@ -0,0 +1,11 @@ +--- configure.in 2008-03-04 20:13:29.000000000 -0600 ++++ configure.in 2008-03-04 20:13:53.000000000 -0600 +@@ -187,8 +187,6 @@ + dnl End: Nautilus Extension + dnl ============================================== + +-GTK_DOC_CHECK(1.0) +- + AC_CONFIG_FILES([ + Makefile + application-browser/etc/Makefile diff --git a/gnome-base/gnome-main-menu/files/03-tracker-search.patch b/gnome-base/gnome-main-menu/files/03-tracker-search.patch new file mode 100644 index 0000000..172f782 --- /dev/null +++ b/gnome-base/gnome-main-menu/files/03-tracker-search.patch @@ -0,0 +1,13 @@ +Index: main-menu/etc/slab.schemas.in.in +=================================================================== +--- main-menu/etc/slab.schemas.in.in (revision 278) ++++ main-menu/etc/slab.schemas.in.in (working copy) +@@ -77,7 +77,7 @@ + <applyto>/desktop/gnome/applications/main-menu/search_command</applyto> + <owner>gnome-main-menu</owner> + <type>string</type> +- <default>beagle-search SEARCH_STRING</default> ++ <default>tracker-search-tool SEARCH_STRING</default> + <locale name="C"> + <short>This is the command to execute when the search entry is used.</short> + <long>This is the command to execute when the search entry is used. SEARCH_STRING is replaced with the entered search text.</long> diff --git a/gnome-base/gnome-main-menu/files/04-disable-search.patch b/gnome-base/gnome-main-menu/files/04-disable-search.patch new file mode 100644 index 0000000..d5c3ce7 --- /dev/null +++ b/gnome-base/gnome-main-menu/files/04-disable-search.patch @@ -0,0 +1,13 @@ +Index: main-menu/etc/slab.schemas.in.in +=================================================================== +--- main-menu/etc/slab.schemas.in.in (revision 278) ++++ main-menu/etc/slab.schemas.in.in (working copy) +@@ -186,7 +186,7 @@ + <applyto>/desktop/gnome/applications/main-menu/lock-down/search_area_visible</applyto> + <owner>gnome-main-menu</owner> + <type>bool</type> +- <default>true</default> ++ <default>false</default> + <locale name="C"> + <short>lock-down status for the search area</short> + <long>set to true if the search area should be visible and active.</long> diff --git a/gnome-base/gnome-main-menu/files/digest-gnome-main-menu-9999 b/gnome-base/gnome-main-menu/files/digest-gnome-main-menu-9999 new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/gnome-base/gnome-main-menu/files/digest-gnome-main-menu-9999 diff --git a/gnome-base/gnome-main-menu/files/gnome-main-menu-gentooifications.patch b/gnome-base/gnome-main-menu/files/gnome-main-menu-gentooifications.patch new file mode 100644 index 0000000..ec28b07 --- /dev/null +++ b/gnome-base/gnome-main-menu/files/gnome-main-menu-gentooifications.patch @@ -0,0 +1,30 @@ +--- main-menu/etc/applications.xbel ++++ main-menu/etc/applications.xbel +@@ -3,7 +3,7 @@ + xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks" + xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info" + > +- <bookmark href="MozillaFirefox.desktop" added="2007-01-16T05:51:22Z" modified="2007-01-16T05:51:22Z" visited="2007-01-16T05:51:22Z"> ++ <bookmark href="mozilla-firefox-bin.desktop" added="2007-01-16T05:51:22Z" modified="2007-01-16T05:51:22Z" visited="2007-01-16T05:51:22Z"> + <info> + <metadata owner="http://freedesktop.org"> + <mime:mime-type type="application/x-desktop"/> +--- main-menu/etc/system-items.xbel.orig 2008-11-02 00:37:16.000000000 +0100 ++++ main-menu/etc/system-items.xbel 2008-11-02 00:37:00.000000000 +0100 +@@ -30,7 +30,7 @@ + </metadata> + </info> + </bookmark> +- <bookmark href="package-manager.desktop" added="2007-01-16T05:53:36Z" modified="2007-01-16T05:53:36Z" visited="2007-01-16T05:53:36Z"> ++ <bookmark href="porthole.desktop" added="2007-01-16T05:53:36Z" modified="2007-01-16T05:53:36Z" visited="2007-01-16T05:53:36Z"> + <info> + <metadata owner="http://freedesktop.org"> + <mime:mime-type type="application/x-desktop"/> +@@ -44,6 +44,7 @@ + </info> + </bookmark> + <bookmark href="gnome-screensaver-lock.desktop" added="2007-01-16T05:53:36Z" modified="2007-01-16T05:53:36Z" visited="2007-01-16T05:53:36Z"> ++ <title>Lock Screen</title> + <info> + <metadata owner="http://freedesktop.org"> + <mime:mime-type type="application/x-desktop"/> diff --git a/gnome-base/gnome-main-menu/files/gnome-main-menu-shutdown-add.patch b/gnome-base/gnome-main-menu/files/gnome-main-menu-shutdown-add.patch new file mode 100644 index 0000000..d55fee2 --- /dev/null +++ b/gnome-base/gnome-main-menu/files/gnome-main-menu-shutdown-add.patch @@ -0,0 +1,29 @@ +--- main-menu/etc/system-items.xbel.orig 2008-11-02 00:40:19.000000000 +0100 ++++ main-menu/etc/system-items.xbel 2008-11-02 00:41:33.000000000 +0100 +@@ -71,4 +71,15 @@ + </metadata> + </info> + </bookmark> ++ <bookmark href="gnome-session-shutdown.desktop" added="2007-01-16T05:53:36Z" modified="2007-01-16T05:53:36Z" visited="2007-01-16T05:53:36Z"> ++ <title>Shutdown</title> ++ <info> ++ <metadata owner="http://freedesktop.org"> ++ <mime:mime-type type="application/x-desktop"/> ++ <bookmark:applications> ++ <bookmark:application name="Shutdown" exec="gnome-session-save --shutdown-dialog" timestamp="1168926816" count="1"/> ++ </bookmark:applications> ++ </metadata> ++ </info> ++ </bookmark> + </xbel> +--- main-menu/etc/Makefile.am.orig 2008-11-02 00:57:12.000000000 +0100 ++++ main-menu/etc/Makefile.am 2008-11-02 00:57:22.000000000 +0100 +@@ -10,7 +10,7 @@ + ui_DATA = GNOME_MainMenu_ContextMenu.xml + + desktopdir = $(datadir)/applications +-desktop_DATA = gnome-screensaver-lock.desktop gnome-session-kill.desktop ++desktop_DATA = gnome-screensaver-lock.desktop gnome-session-kill.desktop gnome-session-shutdown.desktop + @INTLTOOL_DESKTOP_RULE@ + + bookmarkdir = $(datadir)/gnome-main-menu diff --git a/gnome-base/gnome-main-menu/files/gnome-session-shutdown.desktop b/gnome-base/gnome-main-menu/files/gnome-session-shutdown.desktop new file mode 100644 index 0000000..7ce068f --- /dev/null +++ b/gnome-base/gnome-main-menu/files/gnome-session-shutdown.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Shutdown +Encoding=UTF-8 +Version=1.0 +Icon=gnome-shutdown +Exec=gnome-session-save --shutdown-dialog +Terminal=false +Type=Application +Categories=GNOME;Application;System +OnlyShowIn=GNOME; +X-Ubuntu-Gettext-Domain=gnome-main-menu diff --git a/gnome-base/gnome-main-menu/gnome-main-menu-0.9.10.ebuild b/gnome-base/gnome-main-menu/gnome-main-menu-0.9.10.ebuild new file mode 100644 index 0000000..4eefc41 --- /dev/null +++ b/gnome-base/gnome-main-menu/gnome-main-menu-0.9.10.ebuild @@ -0,0 +1,64 @@ +# Copyright 2000-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/gnome-extra/slab/slab-1.9999.ebuild,v 1.11 2006/07/02 20:24:08 vapier Exp $ + +inherit eutils subversion mono gnome2 + +DESCRIPTION="The new Desktop Menu from SuSE Linux Enterprise by Novell" +HOMEPAGE="http://www.novell.com/products/desktop/preview.html" + +# Have to set SRC_URI blank or gnome2 eclass tries to fetch ${P}.tar.gz +SRC_URI="" + +ESVN_REPO_URI="http://svn.gnome.org/svn/gnome-main-menu/tags/GNOME_MAIN_MENU_0_9_10" + +LICENSE="LGPL-2.1" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="beagle nautilus doc tracker" + +# We have USE flags depending on each other, which leads to this logic. We +# prefer an activated USE flag and override the dependent USE flags. + +RDEPEND=">=net-misc/networkmanager-0.6.3 + >=sys-apps/dbus-0.30 + >=gnome-base/libgtop-2.14.1 + >=sys-apps/hal-0.5.7-r3 + beagle? ( app-misc/beagle ) + tracker? ( app-misc/tracker ) + nautilus? ( gnome-base/nautilus )" +DEPEND="${RDEPEND} + doc? ( + app-doc/doxygen + ) + gnome-base/gnome-common" + +DOCS="AUTHORS COPYING ChangeLog README NEWS" + +G2CONF="${G2CONF} $(use_enable nautilus nautilus-extension)" +G2CONF="${G2CONF} $(use_enable doc gtk-doc)" + +src_unpack() { + subversion_src_unpack + cd ${S} + + gnome2_omf_fix + epatch ${FILESDIR}/01-${PN}-autogen-noconfigure.patch + use doc || epatch ${FILESDIR}/02-configure.in-remove-gtk-doc.patch + if use tracker && ! use beagle ; then + epatch ${FILESDIR}/03-tracker-search.patch + elif ! use tracker && ! use beagle ; then + epatch ${FILESDIR}/04-disable-search.patch + fi + + ./autogen.sh --libexecdir=/usr/libexec --sysconfdir=/etc --libdir=/usr/lib --includedir=/usr/include --sbindir=/sbin +} + +pkg_postinst() { + gnome2_pkg_postinst + if use tracker && use beagle ; then + ewarn "You have both beagle and tracker set in your USE flags." + ewarn "Beagle will be used by default. If you would like to use" + ewarn "tracker, emerge this package with the beagle USE flag unset." + fi +} diff --git a/gnome-base/gnome-main-menu/gnome-main-menu-9999.ebuild b/gnome-base/gnome-main-menu/gnome-main-menu-9999.ebuild new file mode 100644 index 0000000..57e3b11 --- /dev/null +++ b/gnome-base/gnome-main-menu/gnome-main-menu-9999.ebuild @@ -0,0 +1,83 @@ +# Copyright 2000-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +inherit autotools eutils subversion gnome2 + +DESCRIPTION="The new Desktop Menu from SUSE" +HOMEPAGE="http://www.novell.com/products/desktop/preview.html" + +# Have to set SRC_URI blank or gnome2 eclass tries to fetch package +SRC_URI="" + +ESVN_REPO_URI="http://svn.gnome.org/svn/gnome-main-menu/trunk" + +S="${WORKDIR}/${PN}" + +LICENSE="LGPL-2.1" +SLOT="0" +KEYWORDS="~x86" +IUSE="beagle doc libssui nautilus tracker" + +RDEPEND=">=dev-libs/glib-2.12 + >=x11-libs/gtk+-2.13.3 + >=gnome-base/libglade-2 + >=gnome-base/gnome-desktop-2 + >=gnome-base/gnome-panel-2 + >=gnome-base/librsvg-2 + >=gnome-base/gnome-menus-2 + >=gnome-base/gconf-2 + >=gnome-base/libgtop-2 + >=gnome-base/libgnome-2 + >=gnome-base/libgnomeui-2 + dev-libs/dbus-glib + >=net-misc/networkmanager-0.7 + sys-apps/hal + x11-libs/cairo + x11-libs/pango + libssui? ( >=gnome-extra/libssui-0.5.6 ) + nautilus? ( >=gnome-base/nautilus-2.6 ) + tracker? ( app-misc/tracker )" + +DEPEND="${RDEPEND} + doc? ( + dev-util/gtk-doc + )" + +src_unpack() { + subversion_src_unpack + cd ${S} + + gnome2_omf_fix + + epatch "${FILESDIR}"/gnome-main-menu-gentooifications.patch + # shutdown + epatch "${FILESDIR}"/gnome-main-menu-shutdown-add.patch + cp ${FILESDIR}/gnome-session-shutdown.desktop main-menu/etc/ + + use libssui && epatch "${FILESDIR}"/gnome-main-menu-libssui.patch + use doc || epatch "${FILESDIR}"/02-configure.in-remove-gtk-doc.patch + if use tracker && ! use beagle ; then + epatch ${FILESDIR}/03-tracker-search.patch + elif ! use tracker && ! use beagle ; then + epatch ${FILESDIR}/04-disable-search.patch + fi + + G2CONF="`use_enable nautilus nautilus-extension`" + intltoolize --force || die "intloolize failed" + eautoreconf || die "eautoreconf failed" +} + +pkg_postinst() { + + elog + elog " If you want to have recent applications-support working, you should " + elog " also use the patched gnome-panel and gnome-desktop packages from this " + elog " overlay " + elog + if use tracker && use beagle ; then + ewarn " You have both beagle and tracker set in your USE flags. " + ewarn " Beagle will be used by default. If you would like to use " + ewarn " tracker, emerge this package with the beagle USE flag unset. " + fi +} diff --git a/gnome-base/gnome-mount/Manifest b/gnome-base/gnome-mount/Manifest new file mode 100644 index 0000000..8e80bad --- /dev/null +++ b/gnome-base/gnome-mount/Manifest @@ -0,0 +1,2 @@ +DIST gnome-mount-0.8.tar.gz 505788 RMD160 003800eda3edb7747714b1002bd1a1b50ea44fe9 SHA1 846ba178cf9009f3e32c7f55f912b3ca6b9ecedb SHA256 44ca6b78b49a4181435e489c7b7d416c8f26442dcecdc01ec4b981274ed957e2 +EBUILD gnome-mount-0.8.ebuild 881 RMD160 1a29b6f9ed80604793443cd9ff3f5efcced6b287 SHA1 9d62a7a25b9961529bcb9afcc759fa408f9bec71 SHA256 968b1eb91a44fcf9e4651b0e970869a628724da164fbcbec90c09bfc8fd07ba9 diff --git a/gnome-base/gnome-mount/gnome-mount-0.8.ebuild b/gnome-base/gnome-mount/gnome-mount-0.8.ebuild new file mode 100644 index 0000000..dd8e30d --- /dev/null +++ b/gnome-base/gnome-mount/gnome-mount-0.8.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: Exp $ + +inherit eutils gnome2 + +DESCRIPTION="HAL wrapper for (un)mounting and ejecting disks" +HOMEPAGE="http://hal.freedesktop.org/" +SRC_URI="http://hal.freedesktop.org/releases/${P}.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="nautilus" + +RDEPEND=">=x11-libs/gtk+-2.8 + >=gnome-base/gconf-2 + >=gnome-base/gnome-keyring-0.4.0 + >=sys-apps/hal-0.5.8.1 + >=dev-libs/dbus-glib-0.71 + >=x11-libs/libnotify-0.3.0 + nautilus? ( + >=gnome-base/libglade-2 + >=gnome-base/nautilus-2.5 + >=gnome-base/eel-2.5 + )" +DEPEND="${RDEPEND} + sys-devel/gettext + dev-util/pkgconfig + >=dev-util/intltool-0.35.0" + +DOCS="AUTHORS ChangeLog HACKING INSTALL NEWS README TODO" + +pkg_setup() { + G2CONF="$(use_enable nautilus nautilus_extension)" +} diff --git a/gnome-base/gnome-panel/Manifest b/gnome-base/gnome-panel/Manifest new file mode 100644 index 0000000..0bd5bec --- /dev/null +++ b/gnome-base/gnome-panel/Manifest @@ -0,0 +1,20 @@ +AUX gnome-panel-alt-f1-slab.patch 1458 RMD160 090bee7ad7933426509fde2a7305a410ebe92af8 SHA1 78b45ef6ca4234db783b3f23de4f2b9410a83c70 SHA256 d085431812451f471fa78aacd37f0fde85bc5e6588a7e525d3187002aa7f91e4 +AUX gnome-panel-recently-used-apps.patch 4948 RMD160 ebb5b64a0a0573ad5794670985cdd723fe78c830 SHA1 9d4555f328a0cdc7dd9df5f39b0d160dc39d7845 SHA256 33bf7902537bb36dd405532d69d40a6cda7a22607e8b254b4173584d8af72390 +AUX gnome-panel-recently-used-apps.patch~ 4933 RMD160 12071989addf1fa4ffc21c3b00198e2b0db3ffd2 SHA1 18c255bd31587d07d2c49d987cb9613c7133eabb SHA256 20a248d37f035e646f7b23e704f20161e45d2d572f9c35368d15052f1f3d70be +DIST gnome-panel-2.18.1.tar.bz2 2713127 RMD160 380a87bb366ed788110eea55803e33a3b519ca93 SHA1 c690833d3e409cb9b22413aa987163b9d6d3b8b4 SHA256 c04b53bcc0057ed042169baa725ed3769194864e5824643cc0af8c58cf773d2c +DIST gnome-panel-2.18.3.tar.bz2 2722555 RMD160 346c3e981de3af98632d43511545b1877cf9cb5e SHA1 a521b722a1cc753ea0fa3ed7dcf5262750235f9a SHA256 efb12148ace94612b47add4060dd9ae088b47e09e5c4c223f8ab7e1c7dcc9410 +DIST gnome-panel-2.20.0.1.tar.bz2 2804616 RMD160 c48fd450c62e129344a3c33568ec018fbefc5572 SHA1 7743a9653f36a80161b5c63f5a7e2ee51b7b3387 SHA256 70214f2242f1fae76c42a0ed498ccadf776691204181f61fcb95da5e16539dfa +DIST gnome-panel-2.20.2.tar.bz2 2835817 RMD160 e883139c8c873290e7d854c1a45642ff0d34c2a8 SHA1 d3bf83e825afc47e620129f63b0fd00229ef12a7 SHA256 c5415f4c708d7a2bb88a2e1075a73b965adeae8cc790705f57c51170d920779e +DIST gnome-panel-2.22.2.tar.bz2 3255261 RMD160 64a37f44b9f34f74d30f30aca349749a24c80859 SHA1 73752c3ce6224886c2381b0b13111253008bc6f7 SHA256 e1ecc0ddc5a09481deb2daa1f30fa14472bfed541db46bb4f49f3d0d728b0a45 +DIST gnome-panel-2.24.1.tar.bz2 3354268 RMD160 84e7ccd0425c567c9b800cdfecb653f206cdf768 SHA1 01a2376582ba81b006511279767cb74ecb3332af SHA256 35a845990a8f56da191615a82e22f1be47657476647f4fb5c5148668cc999907 +EBUILD gnome-panel-2.18.1-r1.ebuild 2071 RMD160 3889a426eca2417afb202db438831c8240c60a51 SHA1 25b22ab5cd4aa7b1b68019c5308a8c0146b1a970 SHA256 c610c1a7af2f16c2c630bab0d45eb87f91d0cc67e3b42a8f020ea5cc3d1ab69a +EBUILD gnome-panel-2.18.3.ebuild 2057 RMD160 0fefcb446b87c9cfb2c1e62080b413194a40de8a SHA1 8fefe824442df1335ceb838cc1e668e3d44aebfe SHA256 282c86f64ea3613f9f777cc06a9cd35d7bee9e178fff45e7badec679ca1021ed +EBUILD gnome-panel-2.20.0.1.ebuild 2010 RMD160 460ab6b9aefc55701815032f97007992c9a52708 SHA1 ccfab7ea387efbb5b45e7062103fc88073190190 SHA256 303d30f8cf668c311defb611fca35a6da13214ef6fda05c208b97518de22872d +EBUILD gnome-panel-2.20.2-r1.ebuild 2043 RMD160 eeb707d0f9a4f416ad534f30fb88f8bec0cb4bb3 SHA1 7dae92ab069e3d6195077b345694dbb99761cba9 SHA256 e9d97d83b964ce6ffcc56b1be9730413b90b09380d7c76c4f4a50da7a41ba9f0 +EBUILD gnome-panel-2.20.2.ebuild 2099 RMD160 bcf764d1cdd8297b0fe2338954dfa01442445756 SHA1 fbf2a9ccaf165cd651d2347ecd84defc36b8df0a SHA256 c03894138e2c35cb9295de6bcf90f912d0e986a02b9068a74daaea4ddab92885 +EBUILD gnome-panel-2.22.2.ebuild 2224 RMD160 98d295b3bf493ce6a94788b5e36a71a91acac730 SHA1 d7881e50273f5ba53e71ca39bbaf3be42051ca51 SHA256 655cecb4484aaca19aac7e0d4687baacd280d438a686dc1dfdd40675ae4c9c28 +EBUILD gnome-panel-2.24.1.ebuild 2206 RMD160 d571dad7e648a322ff1d0185e38ff3349683bf86 SHA1 91515827cc4033d69b6ac79e2b1f52729a76125f SHA256 e1cc6a8966a9f452150f1c00f81ea2d6750d24404fd2d043f398850f35e9c433 +MISC gnome-panel-2.18.3.ebuild~ 1937 RMD160 9dbf95ed408785b47a604c09a3b6915ce0df75bb SHA1 4719c4ca69af931191c2307eb31284cae553405d SHA256 1515363e70595b8675bcd8fd0fbca62c2123d1a18e3a7720701896ad614dfb9d +MISC gnome-panel-2.20.0.1.ebuild~ 1995 RMD160 b44e367c48c467d079e5445605f44ad1d28ade76 SHA1 821ccd66ee8430d15dc98d55c8c5a4560703358e SHA256 4f2ea5f22d687dc4cd2ac64e87785e8046c0f166e9b047ae4cd3cdedc015593f +MISC gnome-panel-2.20.2.ebuild~ 2010 RMD160 460ab6b9aefc55701815032f97007992c9a52708 SHA1 ccfab7ea387efbb5b45e7062103fc88073190190 SHA256 303d30f8cf668c311defb611fca35a6da13214ef6fda05c208b97518de22872d +MISC gnome-panel-2.24.1.ebuild~ 2311 RMD160 096a7b08768e7ac7ac57b92a942e033341032d96 SHA1 216954a2e1f26800d61293c011525b473dbc96ae SHA256 2e8dfd8903e7e5786564d78ccfd187c4a534a27d5a107492e801a3b9faf46ebe diff --git a/gnome-base/gnome-panel/files/digest-gnome-panel-2.18.1 b/gnome-base/gnome-panel/files/digest-gnome-panel-2.18.1 new file mode 100644 index 0000000..b0cc53d --- /dev/null +++ b/gnome-base/gnome-panel/files/digest-gnome-panel-2.18.1 @@ -0,0 +1,3 @@ +MD5 6c325f5b5f9f424faa494665720bcfb9 gnome-panel-2.18.1.tar.bz2 2713127 +RMD160 380a87bb366ed788110eea55803e33a3b519ca93 gnome-panel-2.18.1.tar.bz2 2713127 +SHA256 c04b53bcc0057ed042169baa725ed3769194864e5824643cc0af8c58cf773d2c gnome-panel-2.18.1.tar.bz2 2713127 diff --git a/gnome-base/gnome-panel/files/digest-gnome-panel-2.18.1-r1 b/gnome-base/gnome-panel/files/digest-gnome-panel-2.18.1-r1 new file mode 100644 index 0000000..b0cc53d --- /dev/null +++ b/gnome-base/gnome-panel/files/digest-gnome-panel-2.18.1-r1 @@ -0,0 +1,3 @@ +MD5 6c325f5b5f9f424faa494665720bcfb9 gnome-panel-2.18.1.tar.bz2 2713127 +RMD160 380a87bb366ed788110eea55803e33a3b519ca93 gnome-panel-2.18.1.tar.bz2 2713127 +SHA256 c04b53bcc0057ed042169baa725ed3769194864e5824643cc0af8c58cf773d2c gnome-panel-2.18.1.tar.bz2 2713127 diff --git a/gnome-base/gnome-panel/files/digest-gnome-panel-2.18.3 b/gnome-base/gnome-panel/files/digest-gnome-panel-2.18.3 new file mode 100644 index 0000000..f415a7e --- /dev/null +++ b/gnome-base/gnome-panel/files/digest-gnome-panel-2.18.3 @@ -0,0 +1,3 @@ +MD5 545348de234fa8222e328fa7f3a5ba71 gnome-panel-2.18.3.tar.bz2 2722555 +RMD160 346c3e981de3af98632d43511545b1877cf9cb5e gnome-panel-2.18.3.tar.bz2 2722555 +SHA256 efb12148ace94612b47add4060dd9ae088b47e09e5c4c223f8ab7e1c7dcc9410 gnome-panel-2.18.3.tar.bz2 2722555 diff --git a/gnome-base/gnome-panel/files/digest-gnome-panel-2.20.0.1 b/gnome-base/gnome-panel/files/digest-gnome-panel-2.20.0.1 new file mode 100644 index 0000000..bfd4ac9 --- /dev/null +++ b/gnome-base/gnome-panel/files/digest-gnome-panel-2.20.0.1 @@ -0,0 +1,3 @@ +MD5 bead455015de6bd86bb7259e6276af9e gnome-panel-2.20.0.1.tar.bz2 2804616 +RMD160 c48fd450c62e129344a3c33568ec018fbefc5572 gnome-panel-2.20.0.1.tar.bz2 2804616 +SHA256 70214f2242f1fae76c42a0ed498ccadf776691204181f61fcb95da5e16539dfa gnome-panel-2.20.0.1.tar.bz2 2804616 diff --git a/gnome-base/gnome-panel/files/digest-gnome-panel-2.20.2 b/gnome-base/gnome-panel/files/digest-gnome-panel-2.20.2 new file mode 100644 index 0000000..ee531b2 --- /dev/null +++ b/gnome-base/gnome-panel/files/digest-gnome-panel-2.20.2 @@ -0,0 +1,3 @@ +MD5 400924a82c03ec04f7842348625e1f4a gnome-panel-2.20.2.tar.bz2 2835817 +RMD160 e883139c8c873290e7d854c1a45642ff0d34c2a8 gnome-panel-2.20.2.tar.bz2 2835817 +SHA256 c5415f4c708d7a2bb88a2e1075a73b965adeae8cc790705f57c51170d920779e gnome-panel-2.20.2.tar.bz2 2835817 diff --git a/gnome-base/gnome-panel/files/gnome-panel-alt-f1-slab.patch b/gnome-base/gnome-panel/files/gnome-panel-alt-f1-slab.patch new file mode 100644 index 0000000..084e1bf --- /dev/null +++ b/gnome-base/gnome-panel/files/gnome-panel-alt-f1-slab.patch @@ -0,0 +1,47 @@ +--- gnome-panel-2.12.2-orig/gnome-panel/panel-action-protocol.c 2005-01-12 05:16:41.000000000 +0100 ++++ gnome-panel-2.12.2/gnome-panel/panel-action-protocol.c 2006-05-11 15:01:49.000000000 +0200 +@@ -50,6 +50,7 @@ panel_action_protocol_main_menu (GdkScre + PanelWidget *panel_widget; + GtkWidget *menu; + AppletInfo *info; ++ gchar *path; + + info = panel_applet_get_by_type (PANEL_OBJECT_MENU_BAR, screen); + if (info) { +@@ -65,6 +66,36 @@ panel_action_protocol_main_menu (GdkScre + return; + } + ++ path = g_find_program_in_path ("application-browser"); ++ if (path) { ++ static Atom action_atom = None, type_atom = None; ++ static gboolean atoms_init = FALSE; ++ XClientMessageEvent ev; ++ Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); ++ ++ if (!atoms_init) { ++ action_atom = XInternAtom (xdisplay, "_SLAB_ACTION_MAIN_MENU", FALSE); ++ type_atom = XInternAtom (xdisplay, "_SLAB_ACTION", FALSE); ++ ++ atoms_init = TRUE; ++ } ++ ++ ev.type = ClientMessage; ++ ev.window = RootWindow (xdisplay, DefaultScreen (xdisplay)); ++ ev.message_type = type_atom; ++ ev.format = 32; ++ ev.data.l[0] = action_atom; ++ ev.data.l[1] = activate_time; ++ ++ XUngrabKeyboard (xdisplay, activate_time); ++ XSendEvent (xdisplay, RootWindow (xdisplay, DefaultScreen (xdisplay)), ++ True, StructureNotifyMask, (XEvent*) &ev); ++ ++ g_free (path); ++ ++ return; ++ } ++ + panel_widget = panels->data; + menu = create_main_menu (panel_widget); + diff --git a/gnome-base/gnome-panel/files/gnome-panel-recently-used-apps.patch b/gnome-base/gnome-panel/files/gnome-panel-recently-used-apps.patch new file mode 100644 index 0000000..972b048 --- /dev/null +++ b/gnome-base/gnome-panel/files/gnome-panel-recently-used-apps.patch @@ -0,0 +1,196 @@ +--- gnome-panel-2.20.0.1/gnome-panel/panel-run-dialog.c.old 2007-10-14 17:06:13.000000000 +0200 ++++ gnome-panel-2.20.0.1/gnome-panel/panel-run-dialog.c 2007-10-14 17:09:26.000000000 +0200 +@@ -61,6 +61,14 @@ + #include "panel-xutils.h" + #include "panel-icon-names.h" + ++#include <gtk/gtkversion.h> ++#if GTK_CHECK_VERSION (2,10,0) ++# define USE_GTK_RECENT_MANAGER ++# include <gtk/gtkrecentmanager.h> ++#else ++# include "egg-recent-model.h" ++#endif ++ + typedef struct { + GtkWidget *run_dialog; + +@@ -114,6 +122,8 @@ static PanelRunDialog *static_dialog = N + + static void panel_run_dialog_disconnect_pixmap (PanelRunDialog *dialog); + ++static void panel_run_dialog_update_recent_apps (PanelRunDialog *dialog, const gchar *cmd); ++ + static void + panel_run_dialog_destroy (PanelRunDialog *dialog) + { +@@ -438,6 +448,8 @@ panel_run_dialog_execute (PanelRunDialog + gnome_entry_prepend_history (GNOME_ENTRY (dialog->gnome_entry), + TRUE, /* save item in history */ + command); ++ ++ panel_run_dialog_update_recent_apps (dialog, command); + + /* only close the dialog if we successfully showed or launched something */ + gtk_widget_destroy (dialog->run_dialog); +@@ -690,6 +702,160 @@ panel_run_dialog_find_command_idle (Pane + return FALSE; + } + ++static void ++panel_run_dialog_update_recent_apps (PanelRunDialog *dialog, const gchar *cmd) ++{ ++ GtkTreeIter iter; ++ GtkTreeModel *model = NULL; ++ GtkTreePath *path = NULL; ++ ++ gchar *found_ditem_path = NULL; ++ gchar *found_ditem_uri = NULL; ++ gchar *found_cmd = NULL; ++ ++ gchar *cmd_i; ++ gchar *ditem_path_i; ++ ++ gboolean fuzzy; ++ ++#ifdef USE_GTK_RECENT_MANAGER ++ GtkRecentManager *recent_manager; ++ GtkRecentData recent_data; ++#else ++ EggRecentModel *recent_model; ++ EggRecentItem *recent_item; ++#endif ++ ++ GError *error = NULL; ++ ++ ++ if (! cmd) ++ return; ++ ++ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->program_list)); ++ path = gtk_tree_path_new_first (); ++ ++ if (! path || ! gtk_tree_model_get_iter (model, & iter, path)) { ++ if (path) ++ gtk_tree_path_free (path); ++ ++ return; ++ } ++ ++ do { ++ cmd_i = NULL; ++ ditem_path_i = NULL; ++ ++ gtk_tree_model_get ( ++ model, & iter, ++ COLUMN_EXEC, & cmd_i, ++ COLUMN_PATH, & ditem_path_i, ++ -1 ++ ); ++ ++ if (cmd_i && ditem_path_i) { ++ fuzzy = FALSE; ++ ++ if (fuzzy_command_match (sure_string (cmd), cmd_i, & fuzzy)) { ++ g_free (found_ditem_path); ++ ++ found_ditem_path = g_strdup (ditem_path_i); ++ found_cmd = g_strdup (cmd_i); ++ ++ if (! fuzzy) { ++ /* ++ * if not fuzzy then we have a precise ++ * match and we can quit, else keep ++ * searching for a better match ++ */ ++ g_free (cmd_i); ++ g_free (ditem_path_i); ++ ++ break; ++ } ++ } ++ } ++ ++ g_free (cmd_i); ++ g_free (ditem_path_i); ++ ++ } while (gtk_tree_model_iter_next (model, & iter)); ++ ++ gtk_tree_path_free (path); ++ ++#ifdef USE_GTK_RECENT_MANAGER ++ recent_manager = gtk_recent_manager_get_default (); ++ ++ if (! recent_manager) ++ goto exit; ++#else ++ recent_model = egg_recent_model_new (EGG_RECENT_MODEL_SORT_NONE); ++ ++ if (! recent_model) ++ goto exit; ++#endif ++ ++ if (found_ditem_path) { ++ found_ditem_uri = g_filename_to_uri (found_ditem_path, NULL, & error); ++ ++ if (! error) { ++#ifdef USE_GTK_RECENT_MANAGER ++ recent_data.display_name = NULL; ++ recent_data.description = NULL; ++ recent_data.mime_type = g_strdup ("application/x-desktop"); ++ recent_data.is_private = TRUE; ++ ++ recent_data.app_name = g_strdup (g_get_application_name ()); ++ if (! recent_data.app_name) ++ recent_data.app_name = g_strdup ("gnome-panel run dialog"); ++ ++ recent_data.app_exec = g_strdup (g_strdup (found_cmd)); ++ if (! recent_data.app_exec) ++ recent_data.app_exec = g_strdup ("gnome-open %u"); ++ ++ recent_data.groups = g_new0 (gchar *, 2); ++ recent_data.groups [0] = g_strdup ("recently-used-apps"); ++ recent_data.groups [1] = NULL; ++ ++ gtk_recent_manager_add_full (recent_manager, found_ditem_uri, & recent_data); ++ ++ g_free (recent_data.mime_type); ++ g_free (recent_data.app_name); ++ g_free (recent_data.app_exec); ++ g_free (recent_data.groups [0]); ++ g_free (recent_data.groups); ++ ++#else ++ ++ recent_item = egg_recent_item_new_from_uri (found_ditem_uri); ++ egg_recent_item_add_group (recent_item, "recently-used-apps"); ++ egg_recent_item_set_private (recent_item, TRUE); ++ ++ egg_recent_model_add_full (recent_model, recent_item); ++ ++ if (recent_item) ++ egg_recent_item_unref (recent_item); ++#endif ++ } ++ else { ++ g_warning ("unable to create uri from [%s] to insert into recent file list.\n", ++ found_ditem_path); ++ ++ g_error_free (error); ++ } ++ } ++ ++#ifndef USE_GTK_RECENT_MANAGER ++ g_object_unref (recent_model); ++#endif ++ ++exit: ++ ++ g_free (found_ditem_path); ++ g_free (found_ditem_uri); ++ g_free (found_cmd); ++} ++ + static gboolean + panel_run_dialog_add_icon_idle (PanelRunDialog *dialog) + { diff --git a/gnome-base/gnome-panel/gnome-panel-2.18.1-r1.ebuild b/gnome-base/gnome-panel/gnome-panel-2.18.1-r1.ebuild new file mode 100644 index 0000000..ba42773 --- /dev/null +++ b/gnome-base/gnome-panel/gnome-panel-2.18.1-r1.ebuild @@ -0,0 +1,72 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-panel/gnome-panel-2.18.1.ebuild,v 1.1 2007/04/17 03:16:51 compnerd Exp $ + +inherit eutils gnome2 + +DESCRIPTION="The GNOME panel" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd" +IUSE="doc eds" + +RDEPEND=">=gnome-base/gnome-desktop-2.12 + >=x11-libs/gtk+-2.10 + >=gnome-base/libglade-2.5 + >=gnome-base/libgnome-2.13 + >=gnome-base/libgnomeui-2.5.4 + >=gnome-base/libbonoboui-2.1.1 + >=gnome-base/orbit-2.4 + >=gnome-base/gnome-vfs-2.14.2 + >=x11-libs/libwnck-2.13.5 + >=gnome-base/gconf-2.6.1 + >=gnome-base/gnome-menus-2.11.1 + >=gnome-base/libbonobo-2 + || ( + >=dev-libs/dbus-glib-0.71 + ( <sys-apps/dbus-0.90 >=sys-apps/dbus-0.60 ) + ) + x11-libs/libXau + media-libs/libpng + >=x11-libs/cairo-1.0.0 + >=x11-libs/pango-1.15.4 + eds? ( >=gnome-extra/evolution-data-server-1.6 )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + >=dev-util/pkgconfig-0.9 + >=dev-util/intltool-0.35 + >=app-text/gnome-doc-utils-0.3.2 + doc? ( >=dev-util/gtk-doc-1 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="--disable-scrollkeeper $(use_enable eds) \ + --with-in-process-applets=clock,notification-area,wncklet" +} + +src_unpack() { + gnome2_src_unpack + + epatch ${FILESDIR}/gnome-panel-recently-used-apps.patch + + # FIXME : uh yeah, this is nice + # We should patch in a switch here and send it upstream + sed -i 's:--load:-v:' ${S}/gnome-panel/Makefile.in || die "sed failed" +} + +pkg_postinst() { + local entries="/etc/gconf/schemas/panel-default-setup.entries" + if [ -e "$entries" ]; then + einfo "setting panel gconf defaults..." + GCONF_CONFIG_SOURCE=`${ROOT}/usr/bin/gconftool-2 --get-default-source` + ${ROOT}/usr/bin/gconftool-2 --direct --config-source \ + ${GCONF_CONFIG_SOURCE} --load=${entries} + fi + + # Calling this late so it doesn't process the GConf schemas file we already + # took care of. + gnome2_pkg_postinst +} diff --git a/gnome-base/gnome-panel/gnome-panel-2.18.3.ebuild b/gnome-base/gnome-panel/gnome-panel-2.18.3.ebuild new file mode 100644 index 0000000..d33ffd7 --- /dev/null +++ b/gnome-base/gnome-panel/gnome-panel-2.18.3.ebuild @@ -0,0 +1,72 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-panel/gnome-panel-2.18.3.ebuild,v 1.9 2007/09/22 09:25:48 tgall Exp $ + +inherit gnome2 + +DESCRIPTION="The GNOME panel" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="alpha amd64 arm hppa ia64 ppc ppc64 sh sparc x86 ~x86-fbsd" +IUSE="doc eds slab" + +RDEPEND=">=gnome-base/gnome-desktop-2.12 + >=x11-libs/gtk+-2.10 + >=gnome-base/libglade-2.5 + >=gnome-base/libgnome-2.13 + >=gnome-base/libgnomeui-2.5.4 + >=gnome-base/libbonoboui-2.1.1 + >=gnome-base/orbit-2.4 + >=gnome-base/gnome-vfs-2.14.2 + >=x11-libs/libwnck-2.13.5 + >=gnome-base/gconf-2.6.1 + >=gnome-base/gnome-menus-2.11.1 + >=gnome-base/libbonobo-2 + >=dev-libs/dbus-glib-0.71 + x11-libs/libXau + media-libs/libpng + >=x11-libs/cairo-1.0.0 + >=x11-libs/pango-1.15.4 + eds? ( >=gnome-extra/evolution-data-server-1.6 ) + slab? ( gnome-base/gnome-main-menu )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + >=dev-util/pkgconfig-0.9 + >=dev-util/intltool-0.35 + >=app-text/gnome-doc-utils-0.3.2 + doc? ( >=dev-util/gtk-doc-1 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="--disable-scrollkeeper $(use_enable eds) \ + --with-in-process-applets=clock,notification-area,wncklet" +} + +src_unpack() { + gnome2_src_unpack + + if use slab; then + epatch ${FILESDIR}/gnome-panel-recently-used-apps.patch + fi + + # FIXME : uh yeah, this is nice + # We should patch in a switch here and send it upstream + sed -i 's:--load:-v:' ${S}/gnome-panel/Makefile.in || die "sed failed" +} + +pkg_postinst() { + local entries="/etc/gconf/schemas/panel-default-setup.entries" + if [ -e "$entries" ]; then + einfo "setting panel gconf defaults..." + GCONF_CONFIG_SOURCE=`${ROOT}/usr/bin/gconftool-2 --get-default-source` + ${ROOT}/usr/bin/gconftool-2 --direct --config-source \ + ${GCONF_CONFIG_SOURCE} --load=${entries} + fi + + # Calling this late so it doesn't process the GConf schemas file we already + # took care of. + gnome2_pkg_postinst +} diff --git a/gnome-base/gnome-panel/gnome-panel-2.20.0.1.ebuild b/gnome-base/gnome-panel/gnome-panel-2.20.0.1.ebuild new file mode 100644 index 0000000..109143c --- /dev/null +++ b/gnome-base/gnome-panel/gnome-panel-2.20.0.1.ebuild @@ -0,0 +1,74 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +inherit autotools eutils gnome2 + +DESCRIPTION="The GNOME panel" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd" +IUSE="doc eds slab" + +RDEPEND=">=gnome-base/gnome-desktop-2.12 + >=x11-libs/pango-1.15.4 + >=dev-libs/glib-2.13.0 + >=x11-libs/gtk+-2.11.3 + >=gnome-base/libglade-2.5 + >=gnome-base/libgnome-2.13 + >=gnome-base/libgnomeui-2.5.4 + >=gnome-base/libbonoboui-2.1.1 + >=gnome-base/orbit-2.4 + >=gnome-base/gnome-vfs-2.14.2 + >=x11-libs/libwnck-2.19.5 + >=gnome-base/gconf-2.6.1 + >=gnome-base/gnome-menus-2.11.1 + >=gnome-base/libbonobo-2 + >=dev-libs/dbus-glib-0.71 + x11-libs/libXau + media-libs/libpng + >=x11-libs/cairo-1.0.0 + eds? ( >=gnome-extra/evolution-data-server-1.6 ) + slab? ( gnome-base/gnome-main-menu )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + >=dev-util/pkgconfig-0.9 + >=dev-util/intltool-0.35 + >=app-text/gnome-doc-utils-0.3.2 + doc? ( >=dev-util/gtk-doc-1 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="--disable-scrollkeeper $(use_enable eds) \ + --with-in-process-applets=clock,notification-area,wncklet" +} + +src_unpack() { + gnome2_src_unpack + + if use slab; then + epatch ${FILESDIR}/gnome-panel-recently-used-apps.patch + fi + + # FIXME : uh yeah, this is nice + # We should patch in a switch here and send it upstream + sed -i 's:--load:-v:' "${S}/gnome-panel/Makefile.in" || die "sed failed" +} + +pkg_postinst() { + local entries="/etc/gconf/schemas/panel-default-setup.entries" + + if [ -e "$entries" ]; then + einfo "setting panel gconf defaults..." + GCONF_CONFIG_SOURCE=`"${ROOT}usr/bin/gconftool-2" --get-default-source` + "${ROOT}usr/bin/gconftool-2" --direct --config-source \ + "${GCONF_CONFIG_SOURCE}" --load="${entries}" + fi + + # Calling this late so it doesn't process the GConf schemas file we already + # took care of. + gnome2_pkg_postinst +} diff --git a/gnome-base/gnome-panel/gnome-panel-2.20.2-r1.ebuild b/gnome-base/gnome-panel/gnome-panel-2.20.2-r1.ebuild new file mode 100644 index 0000000..0a546ad --- /dev/null +++ b/gnome-base/gnome-panel/gnome-panel-2.20.2-r1.ebuild @@ -0,0 +1,75 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +inherit autotools eutils gnome2 + +DESCRIPTION="The GNOME panel" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd" +IUSE="doc eds slab" + +RDEPEND=">=gnome-base/gnome-desktop-2.12 + >=x11-libs/pango-1.15.4 + >=dev-libs/glib-2.13.0 + >=x11-libs/gtk+-2.11.3 + >=gnome-base/libglade-2.5 + >=gnome-base/libgnome-2.13 + >=gnome-base/libgnomeui-2.5.4 + >=gnome-base/libbonoboui-2.1.1 + >=gnome-base/orbit-2.4 + >=gnome-base/gnome-vfs-2.14.2 + >=x11-libs/libwnck-2.19.5 + >=gnome-base/gconf-2.6.1 + >=gnome-base/gnome-menus-2.11.1 + >=gnome-base/libbonobo-2 + >=dev-libs/dbus-glib-0.71 + x11-libs/libXau + media-libs/libpng + >=x11-libs/cairo-1.0.0 + eds? ( >=gnome-extra/evolution-data-server-1.6 ) + slab? ( gnome-base/gnome-main-menu )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + >=dev-util/pkgconfig-0.9 + >=dev-util/intltool-0.35 + >=app-text/gnome-doc-utils-0.3.2 + ~app-text/docbook-xml-dtd-4.1.2 + doc? ( >=dev-util/gtk-doc-1 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="--disable-scrollkeeper $(use_enable eds) \ + --with-in-process-applets=clock,notification-area,wncklet" +} + +src_unpack() { + gnome2_src_unpack + + if use slab; then + epatch ${FILESDIR}/gnome-panel-recently-used-apps.patch + fi + + # FIXME : uh yeah, this is nice + # We should patch in a switch here and send it upstream + sed -i 's:--load:-v:' "${S}/gnome-panel/Makefile.in" || die "sed failed" +} + +pkg_postinst() { + local entries="/etc/gconf/schemas/panel-default-setup.entries" + + if [ -e "$entries" ]; then + einfo "setting panel gconf defaults..." + GCONF_CONFIG_SOURCE=`"${ROOT}usr/bin/gconftool-2" --get-default-source` + "${ROOT}usr/bin/gconftool-2" --direct --config-source \ + "${GCONF_CONFIG_SOURCE}" --load="${entries}" + fi + + # Calling this late so it doesn't process the GConf schemas file we already + # took care of. + gnome2_pkg_postinst +} diff --git a/gnome-base/gnome-panel/gnome-panel-2.20.2.ebuild b/gnome-base/gnome-panel/gnome-panel-2.20.2.ebuild new file mode 100644 index 0000000..500570d --- /dev/null +++ b/gnome-base/gnome-panel/gnome-panel-2.20.2.ebuild @@ -0,0 +1,73 @@ +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-panel/gnome-panel-2.20.3.ebuild,v 1.9 2008/04/20 01:36:01 vapier Exp $ + +inherit autotools eutils gnome2 + +DESCRIPTION="The GNOME panel" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="alpha amd64 arm hppa ia64 ppc ppc64 sh sparc x86 ~x86-fbsd" +IUSE="doc eds" + +RDEPEND=">=gnome-base/gnome-desktop-2.12 + >=x11-libs/pango-1.15.4 + >=dev-libs/glib-2.13.0 + >=x11-libs/gtk+-2.11.3 + >=gnome-base/libglade-2.5 + >=gnome-base/libgnome-2.13 + >=gnome-base/libgnomeui-2.5.4 + >=gnome-base/libbonoboui-2.1.1 + >=gnome-base/orbit-2.4 + >=gnome-base/gnome-vfs-2.14.2 + >=x11-libs/libwnck-2.19.5 + >=gnome-base/gconf-2.6.1 + >=gnome-base/gnome-menus-2.11.1 + >=gnome-base/libbonobo-2 + >=dev-libs/dbus-glib-0.71 + x11-libs/libXau + media-libs/libpng + >=x11-libs/cairo-1.0.0 + eds? ( >=gnome-extra/evolution-data-server-1.6 )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + >=dev-util/pkgconfig-0.9 + >=dev-util/intltool-0.35 + >=app-text/gnome-doc-utils-0.3.2 + ~app-text/docbook-xml-dtd-4.1.2 + doc? ( >=dev-util/gtk-doc-1 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="--disable-scrollkeeper $(use_enable eds) \ + --with-in-process-applets=clock,notification-area,wncklet" +} + +src_unpack() { + gnome2_src_unpack + + # FIXME : uh yeah, this is nice + # We should patch in a switch here and send it upstream + sed -i 's:--load:-v:' "${S}/gnome-panel/Makefile.in" || die "sed failed" + + # Fix LINGUAS + sed -i "2,2 s/ /\n/g" po/LINGUAS || die "Fixing LINGUAS failed" +} + +pkg_postinst() { + local entries="/etc/gconf/schemas/panel-default-setup.entries" + + if [ -e "$entries" ]; then + einfo "setting panel gconf defaults..." + GCONF_CONFIG_SOURCE=`"${ROOT}usr/bin/gconftool-2" --get-default-source` + "${ROOT}usr/bin/gconftool-2" --direct --config-source \ + "${GCONF_CONFIG_SOURCE}" --load="${entries}" + fi + + # Calling this late so it doesn't process the GConf schemas file we already + # took care of. + gnome2_pkg_postinst +} diff --git a/gnome-base/gnome-panel/gnome-panel-2.22.2.ebuild b/gnome-base/gnome-panel/gnome-panel-2.22.2.ebuild new file mode 100644 index 0000000..69d69b6 --- /dev/null +++ b/gnome-base/gnome-panel/gnome-panel-2.22.2.ebuild @@ -0,0 +1,80 @@ +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-panel/gnome-panel-2.22.2.ebuild,v 1.8 2008/09/25 15:21:43 jer Exp $ + +inherit autotools eutils gnome2 + +DESCRIPTION="The GNOME panel" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="alpha amd64 ~arm hppa ia64 ppc ~ppc64 ~sh sparc x86 ~x86-fbsd" +IUSE="doc eds networkmanager" + +RDEPEND=">=gnome-base/gnome-desktop-2.12 + >=x11-libs/pango-1.15.4 + >=dev-libs/glib-2.15.6 + >=x11-libs/gtk+-2.11.3 + >=dev-libs/libgweather-2.22.1 + dev-libs/libxml2 + >=gnome-base/libglade-2.5 + >=gnome-base/libgnome-2.13 + >=gnome-base/libgnomeui-2.5.4 + >=gnome-base/libbonoboui-2.1.1 + >=gnome-base/orbit-2.4 + >=x11-libs/libwnck-2.19.5 + >=gnome-base/gconf-2.6.1 + >=gnome-base/gnome-menus-2.11.1 + >=gnome-base/libbonobo-2 + gnome-base/librsvg + >=dev-libs/dbus-glib-0.71 + >=sys-apps/dbus-1.1.2 + x11-libs/libXau + >=x11-libs/cairo-1.0.0 + eds? ( >=gnome-extra/evolution-data-server-1.6 ) + networkmanager? ( >=net-misc/networkmanager-0.6 )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + >=app-text/gnome-doc-utils-0.3.2 + >=dev-util/pkgconfig-0.9 + >=dev-util/intltool-0.35 + ~app-text/docbook-xml-dtd-4.1.2 + doc? ( >=dev-util/gtk-doc-1 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="${G2CONF} + --disable-scrollkeeper + --disable-polkit + --with-in-process-applets=clock,notification-area,wncklet + $(use_enable networkmanager network-manager) + $(use_enable eds)" +} + +src_unpack() { + gnome2_src_unpack + + # FIXME : uh yeah, this is nice + # We should patch in a switch here and send it upstream + sed -i 's:--load:-v:' "${S}/gnome-panel/Makefile.in" || die "sed failed" +} + +pkg_postinst() { + local entries="/etc/gconf/schemas/panel-default-setup.entries" + local gconftool="${ROOT}usr/bin/gconftool-2" + + if [ -e "$entries" ]; then + einfo "setting panel gconf defaults..." + + GCONF_CONFIG_SOURCE=$("${gconftool}" --get-default-source) + + "${gconftool}" --direct --config-source \ + "${GCONF_CONFIG_SOURCE}" --load="${entries}" + fi + + # Calling this late so it doesn't process the GConf schemas file we already + # took care of. + gnome2_pkg_postinst +} diff --git a/gnome-base/gnome-panel/gnome-panel-2.24.1.ebuild b/gnome-base/gnome-panel/gnome-panel-2.24.1.ebuild new file mode 100644 index 0000000..e82ded9 --- /dev/null +++ b/gnome-base/gnome-panel/gnome-panel-2.24.1.ebuild @@ -0,0 +1,83 @@ +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: Exp $ + +inherit autotools eutils gnome2 + +DESCRIPTION="The GNOME panel" +HOMEPAGE="http://www.gnome.org/" + +LICENSE="GPL-2 FDL-1.1 LGPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc64 ~sparc ~x86" +IUSE="doc eds networkmanager policykit slab" + +RDEPEND=">=gnome-base/gnome-desktop-2.12 + >=x11-libs/pango-1.15.4 + >=dev-libs/glib-2.15.6 + >=x11-libs/gtk+-2.13.1 + >=dev-libs/libgweather-2.24.1 + dev-libs/libxml2 + >=gnome-base/libglade-2.5 + >=gnome-base/libgnome-2.13 + >=gnome-base/libgnomeui-2.5.4 + >=gnome-base/libbonoboui-2.1.1 + >=gnome-base/orbit-2.4 + >=x11-libs/libwnck-2.19.5 + >=gnome-base/gconf-2.6.1 + >=gnome-base/gnome-menus-2.11.1 + >=gnome-base/libbonobo-2 + gnome-base/librsvg + >=dev-libs/dbus-glib-0.71 + >=sys-apps/dbus-1.1.2 + >=x11-libs/cairo-1.0.0 + eds? ( >=gnome-extra/evolution-data-server-1.6 ) + networkmanager? ( >=net-misc/networkmanager-0.6 ) + policykit? ( + >=sys-auth/policykit-0.7 + >=gnome-extra/policykit-gnome-0.7 )" +DEPEND="${RDEPEND} + app-text/scrollkeeper + >=app-text/gnome-doc-utils-0.3.2 + >=dev-util/pkgconfig-0.9 + >=dev-util/intltool-0.40 + ~app-text/docbook-xml-dtd-4.1.2 + doc? ( >=dev-util/gtk-doc-1 )" + +DOCS="AUTHORS ChangeLog HACKING NEWS README" + +pkg_setup() { + G2CONF="${G2CONF} + --disable-scrollkeeper + --with-in-process-applets=clock,notification-area,wncklet + $(use_enable policykit polkit) + $(use_enable networkmanager network-manager) + $(use_enable eds)" +} + +src_unpack() { + gnome2_src_unpack + + if use slab; then + epatch ${FILESDIR}/${PN}-alt-f1-slab.patch + epatch ${FILESDIR}/${PN}-recently-used-apps.patch + fi +} + +pkg_postinst() { + local entries="/etc/gconf/schemas/panel-default-setup.entries" + local gconftool="${ROOT}usr/bin/gconftool-2" + + if [ -e "$entries" ]; then + einfo "setting panel gconf defaults..." + + GCONF_CONFIG_SOURCE=$("${gconftool}" --get-default-source) + + "${gconftool}" --direct --config-source \ + "${GCONF_CONFIG_SOURCE}" --load="${entries}" + fi + + # Calling this late so it doesn't process the GConf schemas file we already + # took care of. + gnome2_pkg_postinst +} |