Add new version for Gnome 2.30
authorPacho Ramos <pacho@gentoo.org>
Mon, 14 Jun 2010 12:08:28 +0000 (12:08 +0000)
committerPacho Ramos <pacho@gentoo.org>
Mon, 14 Jun 2010 12:08:28 +0000 (12:08 +0000)
Package-Manager: portage-2.1.8.3/cvs/Linux x86_64

gnome-base/gnome-settings-daemon/ChangeLog
gnome-base/gnome-settings-daemon/Manifest
gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.0-gst-vol-control-support.patch [new file with mode: 0644]
gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.1-XF86Display.patch [new file with mode: 0644]
gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.1-baobob-check.patch [new file with mode: 0644]
gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.1-osd-icons.patch [new file with mode: 0644]
gnome-base/gnome-settings-daemon/gnome-settings-daemon-2.30.1-r1.ebuild [new file with mode: 0644]

index 8ac3bb0705b44888e4a7ef3307c96b078f4a9b32..d2b3c360417faa463467d5e0fe96b88970109ee6 100644 (file)
@@ -1,6 +1,16 @@
 # ChangeLog for gnome-base/gnome-settings-daemon
 # Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-settings-daemon/ChangeLog,v 1.47 2010/06/04 20:29:56 maekke Exp $
+# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-settings-daemon/ChangeLog,v 1.48 2010/06/14 12:08:28 pacho Exp $
+
+*gnome-settings-daemon-2.30.1-r1 (14 Jun 2010)
+
+  14 Jun 2010; Pacho Ramos <pacho@gentoo.org>
+  +files/gnome-settings-daemon-2.30.0-gst-vol-control-support.patch,
+  +gnome-settings-daemon-2.30.1-r1.ebuild,
+  +files/gnome-settings-daemon-2.30.1-XF86Display.patch,
+  +files/gnome-settings-daemon-2.30.1-baobob-check.patch,
+  +files/gnome-settings-daemon-2.30.1-osd-icons.patch:
+  Add new version for Gnome 2.30.
 
   04 Jun 2010; Markus Meier <maekke@gentoo.org>
   gnome-settings-daemon-2.28.2.ebuild:
index 562c44665039fdb7384a017f1947bfa8974a533c..85dee3a92db2b82d56e0e64b189ccdbc20ee40ee 100644 (file)
@@ -5,21 +5,27 @@ AUX gnome-settings-daemon-2.24.0-automagic.patch 1656 RMD160 895fe60a74854d14229
 AUX gnome-settings-daemon-2.24.1-check-for-server-side-XInput.patch 721 RMD160 0a852a0d0027d05b6086e69cc41468edf5d82192 SHA1 07f8e843740d145cc2fc0dd328435586567fbcb9 SHA256 03d5f3e46baff9f4472410e0d2a58477908af23de2148cb3cd9b202121b60663
 AUX gnome-settings-daemon-2.24.1-gnomedesktop-api.patch 2873 RMD160 8545d4e60fdc72f4153732eadfb93aecee282aed SHA1 e0711aa4382ce93b38a50357530371014a3e6de4 SHA256 9c569aaa2bd9c48771c3c13768a071c3dc999abb0def0e6cac59c7f1976a9996
 AUX gnome-settings-daemon-2.26.1-crash-default-sink-change.patch 1212 RMD160 684648d8336370f1b3c356d39e8b79f5e740c36a SHA1 0aa4f61332f751003b280647b37fd9fc5add93e3 SHA256 86515630893732368bac39cd44362b3c13db6f058ca5940a6ae2e1f4c4fdc4f0
+AUX gnome-settings-daemon-2.30.0-gst-vol-control-support.patch 27189 RMD160 77e44583894977b6255fba168d565c5948481401 SHA1 8db1dde75b1866619d6589e989ed27fc45050c50 SHA256 0858e7fdb97086f7f0a284d535d642c23f06fb7d9fc71d9f7477dc856439a158
+AUX gnome-settings-daemon-2.30.1-XF86Display.patch 2414 RMD160 ed7f21e46a38a274725d73fd4d0aee77e9169a5e SHA1 f0e8bd6614aff70a9876ad2885c4eb5f182323d6 SHA256 5692fdd58fb9f4a1b0f69c4a66d61559abcc55a065c1b7891390bd85b62a2596
+AUX gnome-settings-daemon-2.30.1-baobob-check.patch 3420 RMD160 1b4941e8c93f98660727713fb999c8111b680bc0 SHA1 198d0117147c3c8883f2494e26e6840883e9ed8b SHA256 f1b930fa92d3e11bf6e2bc921bc01bb4af6a3c57192a387ff73aec97371197b4
+AUX gnome-settings-daemon-2.30.1-osd-icons.patch 1574 RMD160 f939afc02651c0f2ce8555776db2c9569454d669 SHA1 05ae65dfdacfcaf891b7c78cca2cf5e0b674b66d SHA256 d1813fab9af4b9dc33dafb1a6fa193c17480878438e105d45c7be124b57ba518
 DIST gnome-settings-daemon-2.26.1-readd-gst-vol-control-support.patch.bz2 7669 RMD160 dc616c73606981af7f47e01973d2f1881fceed04 SHA1 e0194dc45dbfd57da9eead92f4c9c0e586f8eb9f SHA256 4bb694a0ea484c6d74baf2e252c6e9ddb153a3467b480fe55ba18373312fda81
 DIST gnome-settings-daemon-2.26.1.tar.bz2 1084129 RMD160 5cca5fdcbf144d6fc950c5b5f7d5f1304168f4bd SHA1 0c2cef37a0a3333c314a8205cefea9edb8f0669a SHA256 4dff1daa84fe485e302f61286df1dd188292302ee792ddb4fb1c34e65aea0a80
 DIST gnome-settings-daemon-2.28.0-gst-vol-control-support.patch.lzma 6824 RMD160 225250f3fc8791eb9e77eedea1a6a768fc410947 SHA1 492b2e5dadbce83a77482007ba0863386f1d6b95 SHA256 a769b0dcd3dd98242bbc5a66cf8d7f5bbedfca50dc0c517c565bad8b91adb75d
 DIST gnome-settings-daemon-2.28.1.tar.bz2 1174173 RMD160 f73e361e92101f5ca03f6634d1165b0b5ab686f0 SHA1 2fd672a3c85a33d49522ff0938dbd04a842ac768 SHA256 1267ef7d4069189b6bd05b915586b5b323688a136d394e571d29991d59bbadb2
 DIST gnome-settings-daemon-2.28.2-gst-vol-control-support.patch.lzma 6246 RMD160 d37caea466d7ac24b4e5a131f57d929544e0eb1f SHA1 7d26882ee6faadc998e06d8fe125a73cea42f887 SHA256 3d034426eea678f729f204abfb97c255f1eb4eee5fd31d73febe5b9d0dcc7b05
 DIST gnome-settings-daemon-2.28.2.tar.bz2 1170507 RMD160 95699e49a129aefcf61401a6a5329bfa04ef43db SHA1 0887a0839f3d6c4e06af4a95184dabafa754503a SHA256 48af430e10032a8e385f80229acc2bbda0e6d4abef46629e9640f9a6987f1bbe
+DIST gnome-settings-daemon-2.30.1.tar.bz2 1246609 RMD160 80cd897671fe18e93020189c61635c356cb396a0 SHA1 4d56eb3ad43c81f3b51186e332d65924c1fbc883 SHA256 6f66de1bb80af094a640398549799109e60f53d5373a1b0b7719a5a31c900095
 EBUILD gnome-settings-daemon-2.26.1-r2.ebuild 2075 RMD160 37871c1a520edf5a24b45c545ec212b07a4e0e15 SHA1 534ed6062f3ee20e8ba793fd2999c14c7ff4ccb2 SHA256 56f248061808e633d2d48c0320974f294e49309b20943ac490b758af6ffe7919
 EBUILD gnome-settings-daemon-2.28.1.ebuild 2246 RMD160 8ca0fcaf5e01c31156e21ccc1f6bd0b39c823d6a SHA1 61b24555b2f5c3e84a5a2237f61183b209b63ecc SHA256 8bbc87f91311a28016f82c051cd602ff12a94dc90831a5b76472157a7ba80d55
 EBUILD gnome-settings-daemon-2.28.2.ebuild 2202 RMD160 b1d4fdd7701500b526369eb42cb49027a71a33c4 SHA1 aadaab9c258d781f6ce827acde2354fcd223afbc SHA256 e2ed7ff5b06148825405afebd57862863fb7eea938ce1e16d7f38eb3c1c15d7e
-MISC ChangeLog 8314 RMD160 d28965affec2df66ea3de7292379179e977826e0 SHA1 182059f191f85f331ebf5743d7b91b1487d4bd12 SHA256 81ef741b615718d44bdc6cae0b49082e1a028ff4a779f42b7268b876edad7342
+EBUILD gnome-settings-daemon-2.30.1-r1.ebuild 2607 RMD160 05f94fdbb41ec593638293a24caa1ef48bd4c309 SHA1 46044fc36c85dd326a70ab066d9a3b547ead3fef SHA256 1dce7ed2cf22703ede8a036cc7333d61daef7a41b93799b3e5ee806620613e79
+MISC ChangeLog 8724 RMD160 5d6bb40c0e119c8d588e95278ec04dec12873172 SHA1 4f004bde13d15d78e0ee028b2bfdee1001d19b7b SHA256 c1ce868ef64bbfff97b6c15021c4138a5f84e1bb2df9698028e097325fa43494
 MISC metadata.xml 158 RMD160 c0e2bae8e91bb6be8922bac5e4f597302e06587e SHA1 38f78e9790bcd4382b4a49aa226aa6dda1d3a3d7 SHA256 3a7dbca0fdc557de69783e0663e2d76ddab129ea8a19b2d0ef6d3e5d1b947ce1
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.15 (GNU/Linux)
 
-iEYEARECAAYFAkwJYeIACgkQkKaRLQcq0GKA+ACdFHu0QYPe2/JJf94/Cq4Bfyyv
-0hcAnRkYwLnVxjhe/5OnfatkjW/mTjen
-=cUKW
+iEYEARECAAYFAkwWG8QACgkQCaWpQKGI+9Sm3QCfWsParXGbhOr7m/rU9/JSXnSz
+CjkAn3bh3oz8uYcov5KOE+vF/x5eZdlh
+=OUbW
 -----END PGP SIGNATURE-----
diff --git a/gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.0-gst-vol-control-support.patch b/gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.0-gst-vol-control-support.patch
new file mode 100644 (file)
index 0000000..57bb633
--- /dev/null
@@ -0,0 +1,856 @@
+From 32a79f1b04c352dc9b9c28c4bdd3d772eeff974d Mon Sep 17 00:00:00 2001
+From: Priit Laes <plaes@plaes.org>
+Date: Wed, 31 Mar 2010 20:53:05 +0300
+Subject: [PATCH] GStreamer support in the volume applet; powered by the Gentoo GNOME team.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=571145
+---
+ configure.ac                                       |   43 ++
+ plugins/media-keys/Makefile.am                     |   15 +-
+ plugins/media-keys/cut-n-paste/Makefile.am         |   34 ++-
+ .../cut-n-paste/gvc-gstreamer-acme-vol.c           |  402 ++++++++++++++++++++
+ .../cut-n-paste/gvc-gstreamer-acme-vol.h           |   56 +++
+ plugins/media-keys/gsd-media-keys-manager.c        |   64 +++-
+ 6 files changed, 589 insertions(+), 25 deletions(-)
+ create mode 100644 plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.c
+ create mode 100644 plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.h
+
+diff --git a/configure.ac b/configure.ac
+index 92f20c8..723a0cf 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -251,6 +251,48 @@ AM_CONDITIONAL(HAVE_PULSE, test "x$have_pulse" = "xtrue")
+ AC_SUBST(PULSE_CFLAGS)
+ AC_SUBST(PULSE_LIBS)
+ 
++dnl ==============================================
++dnl GStreamer section
++dnl ==============================================
++GST_MAJORMINOR=auto
++
++AC_ARG_ENABLE(gstreamer,
++AC_HELP_STRING([--enable-gstreamer],[use gstreamer if available (and optionally specify a version)]),
++[case "${enableval}" in
++ yes) ENABLE_GSTREAMER=yes ;;
++ 0.10) ENABLE_GSTREAMER=yes && GST_MAJORMINOR=0.10 ;;
++ no)  ENABLE_GSTREAMER=no ;;
++ *) AC_MSG_ERROR([
++                  *** Bad value ${enableval} for --enable-gstreamer
++                  *** Please use one of the following:
++                  ***    --enable-gstreamer=0.10
++               ]) ;;
++esac],
++[ENABLE_GSTREAMER=yes]) dnl Default value
++
++have_gstreamer=no
++if test "x$ENABLE_GSTREAMER" = "xyes"; then
++   GST_REQS=0.10.1.2
++   PKGS="gstreamer-0.10 >= $GST_REQS gstreamer-plugins-base-0.10 >= $GST_REQS"
++
++   PKG_CHECK_MODULES(GST, $PKGS, have_gstreamer=yes,
++                     AC_MSG_RESULT([no]))
++
++   if test "x$have_pulse" = "xtrue"; then
++      AC_MSG_ERROR([*** GStreamer & Pulseaudio both are selected ***])
++   fi
++
++   if test "x$have_gstreamer" = "xyes"; then
++      GST_LIBS="$GST_LIBS -lgstinterfaces-0.10 -lgstaudio-0.10"
++      AC_DEFINE(HAVE_GSTREAMER,1,[enable gstreamer])
++   fi
++else
++   AC_MSG_NOTICE([*** GStreamer support disabled ***])
++fi
++AM_CONDITIONAL(HAVE_GSTREAMER, test "x$have_gstreamer" = "xyes")
++AC_SUBST(GST_LIBS)
++AC_SUBST(GST_CFLAGS)
++
+ # ---------------------------------------------------------------------------
+ # Enable Profiling
+ # ---------------------------------------------------------------------------
+@@ -389,6 +431,7 @@ echo "
+         dbus-1 system.d dir:      ${DBUS_SYS_DIR}
+ 
+         Libnotify support:        ${have_libnotify}
++        GStreamer support:        ${have_gstreamer}
+         PulseAudio support:       ${have_pulse}
+         Profiling support:        ${enable_profiling}
+ "
+diff --git a/plugins/media-keys/Makefile.am b/plugins/media-keys/Makefile.am
+index f9a71cd..92b19f4 100644
+--- a/plugins/media-keys/Makefile.am
++++ b/plugins/media-keys/Makefile.am
+@@ -3,13 +3,8 @@ context = actions
+ 
+ NULL =
+ 
+-SUBDIRS =
+-plugin_LTLIBRARIES =
+-
+-if HAVE_PULSE
+-SUBDIRS += cut-n-paste
+-plugin_LTLIBRARIES += libmedia-keys.la
+-endif
++SUBDIRS = cut-n-paste
++plugin_LTLIBRARIES = libmedia-keys.la
+ 
+ BUILT_SOURCES =                       \
+       gsd-media-keys-manager-glue.h   \
+@@ -100,7 +95,7 @@ libmedia_keys_la_LDFLAGS =          \
+ 
+ libmedia_keys_la_LIBADD  =            \
+       $(top_builddir)/plugins/common/libcommon.la                     \
+-      $(top_builddir)/plugins/media-keys/cut-n-paste/libgvc.la        \
++      $(top_builddir)/plugins/media-keys/cut-n-paste/libgvc.la        \
+       $(SETTINGS_PLUGIN_LIBS)                                         \
+       $(XF86MISC_LIBS)                                                \
+       -lm
+@@ -108,9 +103,7 @@ libmedia_keys_la_LIBADD  =                 \
+ plugin_in_files =             \
+       media-keys.gnome-settings-plugin.in
+ 
+-if HAVE_PULSE
+ plugin_DATA = $(plugin_in_files:.gnome-settings-plugin.in=.gnome-settings-plugin)
+-endif
+ 
+ noinst_PROGRAMS =                             \
+       test-media-keys                         \
+@@ -176,9 +169,7 @@ test_media_keys_LDADD = \
+       $(GST_LIBS)                             \
+       -lm
+ 
+-if HAVE_PULSE
+ test_media_keys_LDADD += $(top_builddir)/plugins/media-keys/cut-n-paste/libgvc.la
+-endif
+ 
+ gtkbuilderdir = $(pkgdatadir)
+ gtkbuilder_DATA =     \
+diff --git a/plugins/media-keys/cut-n-paste/Makefile.am b/plugins/media-keys/cut-n-paste/Makefile.am
+index bc59a10..6486ac0 100644
+--- a/plugins/media-keys/cut-n-paste/Makefile.am
++++ b/plugins/media-keys/cut-n-paste/Makefile.am
+@@ -4,16 +4,24 @@ noinst_LTLIBRARIES = libgvc.la
+ 
+ INCLUDES =                                    \
+       $(WARN_CFLAGS)                          \
+-      $(VOLUME_CONTROL_CFLAGS)                \
+-      $(PULSE_CFLAGS)                         \
+       $(NULL)
+ 
+ libgvc_la_LIBADD =            \
+-      $(VOLUME_CONTROL_LIBS)  \
+-      $(PULSE_LIBS)           \
+       $(NULL)
+ 
+ libgvc_la_SOURCES =                   \
++      $(NULL)
++
++if HAVE_PULSE
++INCLUDES +=                                   \
++      $(VOLUME_CONTROL_CFLAGS)                \
++      $(PULSE_CFLAGS)
++
++libgvc_la_LIBADD +=           \
++      $(VOLUME_CONTROL_LIBS)  \
++      $(PULSE_LIBS)
++
++libgvc_la_SOURCES +=                  \
+       gvc-mixer-stream.h              \
+       gvc-mixer-stream.c              \
+       gvc-channel-map.h               \
+@@ -31,8 +39,22 @@ libgvc_la_SOURCES =                 \
+       gvc-mixer-event-role.h          \
+       gvc-mixer-event-role.c          \
+       gvc-mixer-control.h             \
+-      gvc-mixer-control.c             \
+-      $(NULL)
++      gvc-mixer-control.c
++endif
++
++if HAVE_GSTREAMER
++INCLUDES +=                                   \
++      $(SETTINGS_PLUGIN_CFLAGS)               \
++      $(AM_CFLAGS)                            \
++      $(GST_CFLAGS)
++
++libgvc_la_LIBADD +=           \
++      $(GST_LIBS)
++
++libgvc_la_SOURCES +=                  \
++      gvc-gstreamer-acme-vol.c        \
++      gvc-gstreamer-acme-vol.h
++endif
+ 
+ MAINTAINERCLEANFILES =                  \
+         *~                              \
+diff --git a/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.c b/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.c
+new file mode 100644
+index 0000000..8948480
+--- /dev/null
++++ b/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.c
+@@ -0,0 +1,402 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++
++/* acme-volume.c
++
++   Copyright (C) 2002, 2003 Bastien Nocera
++   Copyright (C) 2004 Novell, Inc.
++   Copyright (C) 2009 PERIER Romain <mrpouet@tuxfamily.org>
++
++   The Gnome Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Library General Public License as
++   published by the Free Software Foundation; either version 2 of the
++   License, or (at your option) any later version.
++
++   The Gnome Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Library General Public License for more details.
++
++   You should have received a copy of the GNU Library General Public
++   License along with the Gnome Library; see the file COPYING.LIB.  If not,
++   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.
++
++   Author: Bastien Nocera <hadess@hadess.net>
++           Jon Trowbridge <trow@ximian.com>
++*/
++
++#include "config.h"
++#include "gvc-gstreamer-acme-vol.h"
++
++#include <gst/gst.h>
++#include <gst/audio/mixerutils.h>
++#include <gst/interfaces/mixer.h>
++#include <gst/interfaces/propertyprobe.h>
++
++#include <gconf/gconf-client.h>
++
++#include <string.h>
++
++#define TIMEOUT       4
++
++#define DEFAULT_MIXER_DEVICE_KEY   "/desktop/gnome/sound/default_mixer_device"
++#define DEFAULT_MIXER_TRACKS_KEY   "/desktop/gnome/sound/default_mixer_tracks"
++
++#define ACME_VOLUME_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ACME_TYPE_VOLUME, AcmeVolumePrivate))
++
++struct AcmeVolumePrivate {
++      GstMixer     *mixer;
++      GList        *mixer_tracks;
++      guint         timer_id;
++      gdouble       volume;
++      gboolean      mute;
++      GConfClient  *gconf_client;
++};
++
++G_DEFINE_TYPE (AcmeVolume, acme_volume, G_TYPE_OBJECT)
++
++static gboolean acme_volume_open  (AcmeVolume *acme);
++static void     acme_volume_close (AcmeVolume *acme);
++static gboolean acme_volume_close_real (AcmeVolume *self);
++
++static gpointer acme_volume_object = NULL;
++
++static void
++acme_volume_finalize (GObject *object)
++{
++      AcmeVolume *self;
++
++      g_return_if_fail (object != NULL);
++      g_return_if_fail (ACME_IS_VOLUME (object));
++
++      self = ACME_VOLUME (object);
++
++      if (self->_priv->timer_id != 0)
++              g_source_remove (self->_priv->timer_id);
++      acme_volume_close_real (self);
++
++      if (self->_priv->gconf_client != NULL) {
++              g_object_unref (self->_priv->gconf_client);
++              self->_priv->gconf_client = NULL;
++      }
++
++      G_OBJECT_CLASS (acme_volume_parent_class)->finalize (object);
++}
++
++void
++acme_volume_set_mute (AcmeVolume *self, gboolean val)
++{
++      GList *t;
++
++      g_return_if_fail(ACME_IS_VOLUME(self));
++      g_return_if_fail(acme_volume_open(self));
++
++      for (t = self->_priv->mixer_tracks; t != NULL; t = t->next) {
++              GstMixerTrack *track = GST_MIXER_TRACK (t->data);
++              gst_mixer_set_mute (self->_priv->mixer, track, val);
++      }
++      self->_priv->mute = val;
++      acme_volume_close (self);
++}
++
++static void
++update_state (AcmeVolume * self)
++{
++      gint *volumes, n;
++      gdouble vol = 0;
++      GstMixerTrack *track = GST_MIXER_TRACK (self->_priv->mixer_tracks->data);
++
++      /* update mixer by getting volume */
++      volumes = g_new0 (gint, track->num_channels);
++      gst_mixer_get_volume (self->_priv->mixer, track, volumes);
++      for (n = 0; n < track->num_channels; n++)
++              vol += volumes[n];
++      g_free (volumes);
++      vol /= track->num_channels;
++      vol = 100 * vol / (track->max_volume - track->min_volume);
++
++      /* update mute flag, and volume if not muted */
++      if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MUTE))
++              self->_priv->mute = TRUE;
++      self->_priv->volume = vol;
++}
++
++gboolean
++acme_volume_get_mute (AcmeVolume *self)
++{
++      g_return_val_if_fail(acme_volume_open(self), FALSE);
++
++      update_state (self);
++      acme_volume_close (self);
++
++      return self->_priv->mute;
++}
++
++gint
++acme_volume_get_volume (AcmeVolume *self)
++{
++
++      g_return_val_if_fail(acme_volume_open(self), 0);
++
++      update_state (self);
++
++      acme_volume_close (self);
++      
++      return (gint) (self->_priv->volume + 0.5);
++}
++
++void
++acme_volume_set_volume (AcmeVolume *self, gint val)
++{
++      GList *t;
++
++      g_return_if_fail(acme_volume_open(self));
++
++      val = CLAMP (val, 0, 100);
++
++      for (t = self->_priv->mixer_tracks; t != NULL; t = t->next) {
++              GstMixerTrack *track = GST_MIXER_TRACK (t->data);
++              gint *volumes, n;
++              gdouble scale = (track->max_volume - track->min_volume) / 100.0;
++              gint vol = (gint) (val * scale + track->min_volume + 0.5);
++
++              volumes = g_new (gint, track->num_channels);
++              for (n = 0; n < track->num_channels; n++)
++                      volumes[n] = vol;
++              gst_mixer_set_volume (self->_priv->mixer, track, volumes);
++              g_free (volumes);
++      }
++
++      /* update state */
++      self->_priv->volume = val;
++
++      acme_volume_close (self);
++}
++
++void
++acme_volume_mute_toggle (AcmeVolume *self)
++{
++      gboolean muted;
++
++      g_return_if_fail (self != NULL);
++      g_return_if_fail (ACME_IS_VOLUME(self));
++
++      muted = acme_volume_get_mute(self);
++      acme_volume_set_mute(self, !muted);
++}
++
++gint
++acme_volume_get_threshold (AcmeVolume *self)
++{
++      GList *t;
++      gint steps = 101;
++
++      g_return_val_if_fail(acme_volume_open(self), 1);
++
++      for (t = self->_priv->mixer_tracks; t != NULL; t = t->next) {
++              GstMixerTrack *track = GST_MIXER_TRACK (t->data);
++              gint track_steps = track->max_volume - track->min_volume;
++              if (track_steps > 0 && track_steps < steps)
++                      steps = track_steps;
++      }
++
++      acme_volume_close (self);
++
++      return 100 / steps + 1;
++}
++
++static gboolean
++acme_volume_close_real (AcmeVolume *self)
++{
++      if (self->_priv->mixer != NULL)
++      {
++              gst_element_set_state (GST_ELEMENT (self->_priv->mixer), GST_STATE_NULL);
++              gst_object_unref (GST_OBJECT (self->_priv->mixer));
++              g_list_foreach (self->_priv->mixer_tracks, (GFunc) g_object_unref, NULL);
++              g_list_free (self->_priv->mixer_tracks);
++              self->_priv->mixer = NULL;
++              self->_priv->mixer_tracks = NULL;
++      }
++
++      self->_priv->timer_id = 0;
++      return FALSE;
++}
++
++/*
++ * _acme_set_mixer
++ * @mixer  A pointer to mixer element
++ * @data   A pointer to user data (AcmeVolume instance to be modified)
++ * @return A gboolean indicating success if Master track was found, failed otherwises.
++ */
++static gboolean
++_acme_set_mixer(GstMixer *mixer, gpointer user_data)
++{
++      const GList *tracks;
++
++      for (tracks = gst_mixer_list_tracks (mixer); tracks != NULL; tracks = tracks->next) {
++              GstMixerTrack *track = GST_MIXER_TRACK (tracks->data);
++
++              if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MASTER)) {
++                      AcmeVolume *self;
++
++                      self = ACME_VOLUME (user_data);
++
++                      self->_priv->mixer = mixer;
++                      self->_priv->mixer_tracks = g_list_append (self->_priv->mixer_tracks, g_object_ref (track));
++                      return TRUE;
++              }
++
++              continue;
++      }
++
++      return FALSE;
++}
++
++/* This is a modified version of code from gnome-media's gst-mixer */
++static gboolean
++acme_volume_open (AcmeVolume *self)
++{
++      gchar *mixer_device, **factory_and_device = NULL;
++      GList *mixer_list;
++
++      if (self->_priv->timer_id != 0) {
++              g_source_remove (self->_priv->timer_id);
++              self->_priv->timer_id = 0;
++              return TRUE;
++      }
++
++      mixer_device = gconf_client_get_string (self->_priv->gconf_client, DEFAULT_MIXER_DEVICE_KEY, NULL);
++      if (mixer_device != NULL)
++              factory_and_device = g_strsplit (mixer_device, ":", 2);
++
++      if (factory_and_device != NULL && factory_and_device[0] != NULL) {
++              GstElement *element;
++
++              element = gst_element_factory_make (factory_and_device[0], NULL);
++
++              if (element != NULL) {
++                      if (factory_and_device[1] != NULL &&
++                          g_object_class_find_property (G_OBJECT_GET_CLASS (element), "device"))
++                              g_object_set (G_OBJECT (element), "device", factory_and_device[1], NULL);
++                      gst_element_set_state (element, GST_STATE_READY);
++
++                      if (GST_IS_MIXER (element))
++                              self->_priv->mixer = GST_MIXER (element);
++                      else {
++                              gst_element_set_state (element, GST_STATE_NULL);
++                              gst_object_unref (element);
++                      }
++              }
++      }
++
++      g_free (mixer_device);
++      g_strfreev (factory_and_device);
++
++      if (self->_priv->mixer != NULL) {
++              const GList *m;
++              GSList *tracks, *t;
++              GError *error = NULL;
++
++              /* Try to use tracks saved in GConf 
++                 Note: errors need to be treated , for example if the user set a non type list for this key
++                 or if the elements type_list are not "matched" */
++              tracks = gconf_client_get_list (self->_priv->gconf_client, DEFAULT_MIXER_TRACKS_KEY, 
++                                              GCONF_VALUE_STRING, &error);
++
++              if (error) {
++                      g_warning("ERROR: %s\n", error->message);
++                      g_error_free(error);
++              }
++
++              /* We use these tracks ONLY if they are supported on the system with the following mixer */
++              for (m = gst_mixer_list_tracks (self->_priv->mixer); m != NULL; m = m->next) {
++                      GstMixerTrack *track = GST_MIXER_TRACK (m->data);
++
++                      for (t = tracks; t != NULL; t = t->next)
++                              if (!strcmp (t->data, track->label))
++                                      self->_priv->mixer_tracks = g_list_append (self->_priv->mixer_tracks, g_object_ref (track));
++
++              }
++
++              g_slist_foreach (tracks, (GFunc)g_free, NULL);
++              g_slist_free (tracks);
++
++              /* If no track stored in GConf is avaiable try to use Master track */
++              if (self->_priv->mixer_tracks == NULL) {
++                      for (m = gst_mixer_list_tracks (self->_priv->mixer); m != NULL; m = m->next) {
++                              GstMixerTrack *track = GST_MIXER_TRACK (m->data);
++
++                              if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MASTER)) {
++                                      self->_priv->mixer_tracks = g_list_append (self->_priv->mixer_tracks, g_object_ref (track));
++                                      break;
++                              }
++                      }
++              }
++
++              if (self->_priv->mixer_tracks != NULL)
++                      return TRUE;
++              else {
++                      gst_element_set_state (GST_ELEMENT (self->_priv->mixer), GST_STATE_NULL);
++                      gst_object_unref (self->_priv->mixer);
++              }
++      }
++
++      /* Go through all elements of a certain class and check whether
++       * they implement a mixer. If so, walk through the tracks and look
++       * for first one named "volume".
++       *
++       * We should probably do something intelligent if we don't find an
++       * appropriate mixer/track.  But now we do something stupid...
++       * everything just becomes a no-op.
++       */
++      mixer_list = gst_audio_default_registry_mixer_filter (_acme_set_mixer,
++                      TRUE,
++                      self);
++
++      if (mixer_list == NULL)
++              return FALSE;
++
++      /* do not unref the mixer as we keep the ref for self->priv->mixer */
++      g_list_free (mixer_list);
++
++      return TRUE;
++}
++
++static void
++acme_volume_close (AcmeVolume *self)
++{
++      self->_priv->timer_id = g_timeout_add_seconds (TIMEOUT,
++                      (GSourceFunc) acme_volume_close_real, self);
++}
++
++static void
++acme_volume_init (AcmeVolume *self)
++{
++      self->_priv = ACME_VOLUME_GET_PRIVATE (self);
++      self->_priv->gconf_client = gconf_client_get_default ();
++}
++
++static void
++acme_volume_class_init (AcmeVolumeClass *klass)
++{
++      G_OBJECT_CLASS (klass)->finalize = acme_volume_finalize;
++
++      gst_init (NULL, NULL);
++
++      g_type_class_add_private (klass, sizeof (AcmeVolumePrivate));
++}
++
++/* acme_volume_new
++ * @return A singleton instance of type AcmeVolume
++ */
++AcmeVolume *
++acme_volume_new (void)
++{
++      if (acme_volume_object == NULL) {
++              acme_volume_object = g_object_new (ACME_TYPE_VOLUME, NULL);
++              return ACME_VOLUME(acme_volume_object);
++      }
++      g_object_ref(acme_volume_object);
++      return ACME_VOLUME(acme_volume_object);
++}
++
+diff --git a/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.h b/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.h
+new file mode 100644
+index 0000000..c14ebc8
+--- /dev/null
++++ b/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.h
+@@ -0,0 +1,56 @@
++/* acme-volume.h
++
++   Copyright (C) 2002, 2003 Bastien Nocera
++   Copyright (C) 2004 Novell, Inc.
++   Copyright (C) 2009 PERIER Romain <mrpouet@tuxfamily.org>
++
++   The Gnome Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Library General Public License as
++   published by the Free Software Foundation; either version 2 of the
++   License, or (at your option) any later version.
++
++   The Gnome Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Library General Public License for more details.
++
++   You should have received a copy of the GNU Library General Public
++   License along with the Gnome Library; see the file COPYING.LIB.  If not,
++   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.
++
++   Author: Bastien Nocera <hadess@hadess.net>
++           Jon Trowbridge <trow@ximian.com>
++ */
++
++#include <glib-object.h>
++
++#define ACME_TYPE_VOLUME                        (acme_volume_get_type ())
++#define ACME_VOLUME(obj)                      (G_TYPE_CHECK_INSTANCE_CAST ((obj), ACME_TYPE_VOLUME, AcmeVolume))
++#define ACME_VOLUME_CLASS(klass)              (G_TYPE_CHECK_CLASS_CAST ((klass),  ACME_TYPE_VOLUME, AcmeVolumeClass))
++#define ACME_IS_VOLUME(obj)                   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ACME_TYPE_VOLUME))
++#define ACME_VOLUME_GET_CLASS(obj)            (G_TYPE_INSTANCE_GET_CLASS ((obj), ACME_TYPE_VOLUME, AcmeVolumeClass))
++
++typedef struct AcmeVolume AcmeVolume;
++typedef struct AcmeVolumeClass AcmeVolumeClass;
++typedef struct AcmeVolumePrivate AcmeVolumePrivate;
++
++struct AcmeVolume {
++      GObject parent;
++      AcmeVolumePrivate *_priv;
++};
++
++struct AcmeVolumeClass {
++      GObjectClass parent;
++};
++
++GType       acme_volume_get_type      (void);
++AcmeVolume *acme_volume_new           (void);
++void        acme_volume_set_mute      (AcmeVolume *self, gboolean val);
++void        acme_volume_mute_toggle   (AcmeVolume *self);
++gboolean    acme_volume_get_mute      (AcmeVolume *self);
++void        acme_volume_set_volume    (AcmeVolume *self, gint val);
++gint        acme_volume_get_volume    (AcmeVolume *self);
++gint        acme_volume_get_threshold (AcmeVolume *self);
++
++
+diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
+index b563f73..64893b5 100644
+--- a/plugins/media-keys/gsd-media-keys-manager.c
++++ b/plugins/media-keys/gsd-media-keys-manager.c
+@@ -53,6 +53,8 @@
+ #ifdef HAVE_PULSE
+ #include <canberra-gtk.h>
+ #include "gvc-mixer-control.h"
++#elif defined(HAVE_GSTREAMER)
++#include "gvc-gstreamer-acme-vol.h"
+ #endif /* HAVE_PULSE */
+ 
+ #define GSD_DBUS_PATH "/org/gnome/SettingsDaemon"
+@@ -78,6 +80,8 @@ struct GsdMediaKeysManagerPrivate
+         /* Volume bits */
+         GvcMixerControl *volume;
+         GvcMixerStream  *stream;
++#elif defined(HAVE_GSTREAMER)
++        AcmeVolume      *volume;
+ #endif /* HAVE_PULSE */
+         GtkWidget       *dialog;
+         GConfClient     *conf_client;
+@@ -650,14 +654,16 @@ do_touchpad_action (GsdMediaKeysManager *manager)
+         gconf_client_set_bool (client, TOUCHPAD_ENABLED_KEY, !state, NULL);
+ }
+ 
+-#ifdef HAVE_PULSE
++#if defined(HAVE_PULSE) || defined(HAVE_GSTREAMER)
+ static void
+ update_dialog (GsdMediaKeysManager *manager,
+                guint vol,
+                gboolean muted,
+                gboolean sound_changed)
+ {
++#ifdef HAVE_PULSE
+         vol = (int) (100 * (double) vol / PA_VOLUME_NORM);
++#endif
+         vol = CLAMP (vol, 0, 100);
+ 
+         dialog_init (manager);
+@@ -668,12 +674,14 @@ update_dialog (GsdMediaKeysManager *manager,
+                                           GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME);
+         dialog_show (manager);
+ 
++#ifdef HAVE_PULSE
+         if (sound_changed != FALSE && muted == FALSE)
+                 ca_gtk_play_for_widget (manager->priv->dialog, 0,
+                                         CA_PROP_EVENT_ID, "audio-volume-change",
+                                         CA_PROP_EVENT_DESCRIPTION, "volume changed through key press",
+                                         CA_PROP_APPLICATION_ID, "org.gnome.VolumeControl",
+                                         NULL);
++#endif
+ }
+ 
+ static void
+@@ -685,7 +693,11 @@ do_sound_action (GsdMediaKeysManager *manager,
+         int vol_step;
+         gboolean sound_changed;
+ 
++#ifdef HAVE_PULSE
+         if (manager->priv->stream == NULL)
++#else
++        if (manager->priv->volume == NULL)
++#endif
+                 return;
+ 
+         vol_step = gconf_client_get_int (manager->priv->conf_client,
+@@ -695,20 +707,35 @@ do_sound_action (GsdMediaKeysManager *manager,
+         if (vol_step <= 0 || vol_step > 100)
+                 vol_step = VOLUME_STEP;
+ 
++        sound_changed = FALSE;
++#ifdef HAVE_PULSE
+         norm_vol_step = PA_VOLUME_NORM * vol_step / 100;
+ 
+         /* FIXME: this is racy */
+         vol = gvc_mixer_stream_get_volume (manager->priv->stream);
+         muted = gvc_mixer_stream_get_is_muted (manager->priv->stream);
+-        sound_changed = FALSE;
+-
++#else
++         if (vol_step > 0) {
++                 gint threshold = acme_volume_get_threshold (manager->priv->volume);
++                 if (vol_step < threshold)
++                         vol_step = threshold;
++                 g_debug ("Using volume step of %d", vol_step);
++         }
++         vol = acme_volume_get_volume (manager->priv->volume);
++         muted = acme_volume_get_mute (manager->priv->volume);
++#endif
+         switch (type) {
+         case MUTE_KEY:
+                 muted = !muted;
+-                gvc_mixer_stream_change_is_muted (manager->priv->stream, muted);
+                 sound_changed = TRUE;
++#ifdef HAVE_PULSE
++                gvc_mixer_stream_change_is_muted (manager->priv->stream, muted);
++#else
++                acme_volume_mute_toggle (manager->priv->volume);
++#endif
+                 break;
+         case VOLUME_DOWN_KEY:
++#ifdef HAVE_PULSE
+                 if (!muted && (vol <= norm_vol_step)) {
+                         muted = !muted;
+                         vol = 0;
+@@ -724,11 +751,17 @@ do_sound_action (GsdMediaKeysManager *manager,
+                                 sound_changed = TRUE;
+                         }
+                 }
++#else
++                if (!muted && (vol <= vol_step))
++                        acme_volume_mute_toggle (manager->priv->volume);
++                acme_volume_set_volume (manager->priv->volume, vol - vol_step);
++#endif
+                 break;
+         case VOLUME_UP_KEY:
+                 if (muted) {
+                         muted = !muted;
+                         if (vol == 0) {
++#ifdef HAVE_PULSE
+                                vol = vol + norm_vol_step;
+                                gvc_mixer_stream_change_is_muted (manager->priv->stream, muted);
+                                if (gvc_mixer_stream_set_volume (manager->priv->stream, vol) != FALSE) {
+@@ -739,7 +772,15 @@ do_sound_action (GsdMediaKeysManager *manager,
+                                 gvc_mixer_stream_change_is_muted (manager->priv->stream, muted);
+                                 sound_changed = TRUE;
+                         }
++#else
++                                /* We need to unmute otherwise vol is blocked (and muted) */
++                                acme_volume_set_mute   (manager->priv->volume, FALSE);
++                        }
++                        acme_volume_set_volume (manager->priv->volume, vol + vol_step);
++                        
++#endif
+                 } else {
++#ifdef HAVE_PULSE
+                         if (vol < MAX_VOLUME) {
+                                 if (vol + norm_vol_step >= MAX_VOLUME) {
+                                         vol = MAX_VOLUME;
+@@ -751,13 +792,18 @@ do_sound_action (GsdMediaKeysManager *manager,
+                                         sound_changed = TRUE;
+                                 }
+                         }
++#else
++                        acme_volume_set_volume (manager->priv->volume, vol + vol_step);
++#endif /* HAVE_PULSE */
+                 }
+                 break;
+         }
+ 
+         update_dialog (manager, vol, muted, sound_changed);
+ }
++#endif /* defined(HAVE_PULSE) || defined(HAVE_GSTREAMER) */
+ 
++#ifdef HAVE_PULSE
+ static void
+ update_default_sink (GsdMediaKeysManager *manager)
+ {
+@@ -793,7 +839,6 @@ on_control_default_sink_changed (GvcMixerControl     *control,
+ {
+         update_default_sink (manager);
+ }
+-
+ #endif /* HAVE_PULSE */
+ 
+ static gint
+@@ -919,9 +964,9 @@ do_action (GsdMediaKeysManager *manager,
+         case MUTE_KEY:
+         case VOLUME_DOWN_KEY:
+         case VOLUME_UP_KEY:
+-#ifdef HAVE_PULSE
++#if defined(HAVE_PULSE) || defined(HAVE_GSTREAMER)
+                 do_sound_action (manager, type);
+-#endif /* HAVE_PULSE */
++#endif /* HAVE_PULSE || HAVE_GSTREAMER */
+                 break;
+         case POWER_KEY:
+                 do_exit_action (manager);
+@@ -1122,6 +1167,10 @@ gsd_media_keys_manager_start (GsdMediaKeysManager *manager,
+         gvc_mixer_control_open (manager->priv->volume);
+ 
+         gnome_settings_profile_end ("gvc_mixer_control_new");
++#elif defined(HAVE_GSTREAMER)
++        gnome_settings_profile_start ("acme_volume_new");
++        manager->priv->volume = acme_volume_new ();
++        gnome_settings_profile_end ("acme_volume_new");
+ #endif /* HAVE_PULSE */
+         g_idle_add ((GSourceFunc) start_media_keys_idle_cb, manager);
+ 
+@@ -1199,6 +1248,7 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
+                 g_object_unref (priv->stream);
+                 priv->stream = NULL;
+         }
++#elif defined(HAVE_GSTREAMER)
+ 
+         if (priv->volume) {
+                 g_object_unref (priv->volume);
+-- 
+1.7.0.3
+
diff --git a/gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.1-XF86Display.patch b/gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.1-XF86Display.patch
new file mode 100644 (file)
index 0000000..d693098
--- /dev/null
@@ -0,0 +1,51 @@
+From d5e0550961e337a8ce08e41534bd26f7daab79be Mon Sep 17 00:00:00 2001
+From: Chase Douglas <chase.douglas@ubuntu.com>
+Date: Thu, 06 May 2010 20:51:14 +0000
+Subject: bgo#610482 - Adjust XF86Display timestamps if they are out of order with RANDR timestamps
+
+Some laptops seem to send XF86Display keypress events when you unsuspend them,
+probably as a way to 'make Windows work'.  For some reason these events
+come with timestamps that are out of order with respect to the
+RANDR timestamps.  So we'll adjust the keypress timestamps so that
+the events can be processed.
+
+Signed-off-by: Federico Mena Quintero <federico@novell.com>
+---
+diff --git a/plugins/xrandr/gsd-xrandr-manager.c b/plugins/xrandr/gsd-xrandr-manager.c
+index e78eb6b..bcaa53b 100644
+--- a/plugins/xrandr/gsd-xrandr-manager.c
++++ b/plugins/xrandr/gsd-xrandr-manager.c
+@@ -988,6 +988,8 @@ handle_fn_f7 (GsdXrandrManager *mgr, guint32 timestamp)
+         gnome_rr_config_free (current);
+ 
+         if (priv->fn_f7_configs) {
++                guint32 server_timestamp;
++
+                 mgr->priv->current_fn_f7_config++;
+ 
+                 if (priv->fn_f7_configs[mgr->priv->current_fn_f7_config] == NULL)
+@@ -999,6 +1001,22 @@ handle_fn_f7 (GsdXrandrManager *mgr, guint32 timestamp)
+ 
+                 g_debug ("applying");
+ 
++                /* See https://bugzilla.gnome.org/show_bug.cgi?id=610482
++                 *
++                 * Sometimes we'll get two rapid XF86Display keypress events,
++                 * but their timestamps will be out of order with respect to the
++                 * RANDR timestamps.  This *may* be due to stupid BIOSes sending
++                 * out display-switch keystrokes "to make Windows work".
++                 *
++                 * The X server will error out if the timestamp provided is
++                 * older than a previous change configuration timestamp. We
++                 * assume here that we do want this event to go through still,
++                 * since kernel timestamps may be skewed wrt the X server.
++                 */
++                gnome_rr_screen_get_timestamps (screen, NULL, &server_timestamp);
++                if (timestamp < server_timestamp)
++                        timestamp = server_timestamp;
++
+                 apply_configuration_and_display_error (mgr, priv->fn_f7_configs[mgr->priv->current_fn_f7_config], timestamp);
+         }
+         else {
+--
+cgit v0.8.3.1
diff --git a/gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.1-baobob-check.patch b/gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.1-baobob-check.patch
new file mode 100644 (file)
index 0000000..dbc1d3f
--- /dev/null
@@ -0,0 +1,84 @@
+From 0b266339403255b8c23ea31015e3ef40e620b9bb Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross@linux.intel.com>
+Date: Mon, 17 May 2010 14:52:18 +0000
+Subject: housekeeping: only check for baobob if we're about to show a dialog (part of BMC#1583)
+
+---
+diff --git a/plugins/housekeeping/gsd-disk-space.c b/plugins/housekeeping/gsd-disk-space.c
+index 82ff7e6..8c4d378 100644
+--- a/plugins/housekeeping/gsd-disk-space.c
++++ b/plugins/housekeeping/gsd-disk-space.c
+@@ -172,14 +172,14 @@ ldsm_analyze_path (const gchar *path)
+ 
+ static gboolean
+ ldsm_notify_for_mount (LdsmMountInfo *mount,
+-                       gboolean       has_disk_analyzer,
+                        gboolean       multiple_volumes,
+                        gboolean       other_usable_volumes)
+ {
+-        gchar  *name;
++        gchar  *name, *program;
+         gint64 free_space;
+         gint response;
+         gboolean has_trash;
++        gboolean has_disk_analyzer;
+         gboolean retval = TRUE;
+         const gchar *path;
+ 
+@@ -192,6 +192,10 @@ ldsm_notify_for_mount (LdsmMountInfo *mount,
+         has_trash = ldsm_mount_has_trash (mount);
+         path = g_unix_mount_get_mount_path (mount->mount);
+ 
++        program = g_find_program_in_path (DISK_SPACE_ANALYZER);
++        has_disk_analyzer = (program != NULL);
++        g_free (program);
++
+         dialog = gsd_ldsm_dialog_new (other_usable_volumes,
+                                       multiple_volumes,
+                                       has_disk_analyzer,
+@@ -359,7 +363,6 @@ ldsm_free_mount_info (gpointer data)
+ 
+ static void
+ ldsm_maybe_warn_mounts (GList *mounts,
+-                        gboolean has_disk_analyzer,
+                         gboolean multiple_volumes,
+                         gboolean other_usable_volumes)
+ {
+@@ -418,7 +421,7 @@ ldsm_maybe_warn_mounts (GList *mounts,
+                 }
+ 
+                 if (show_notify) {
+-                        if (ldsm_notify_for_mount (mount_info, has_disk_analyzer, multiple_volumes, other_usable_volumes))
++                        if (ldsm_notify_for_mount (mount_info, multiple_volumes, other_usable_volumes))
+                                 done = TRUE;
+                 }
+         }
+@@ -431,17 +434,11 @@ ldsm_check_all_mounts (gpointer data)
+         GList *l;
+         GList *check_mounts = NULL;
+         GList *full_mounts = NULL;
+-        char *program;
+-        gboolean has_disk_analyzer;
+         guint number_of_mounts;
+         guint number_of_full_mounts;
+         gboolean multiple_volumes = FALSE;
+         gboolean other_usable_volumes = FALSE;
+ 
+-        program = g_find_program_in_path (DISK_SPACE_ANALYZER);
+-        has_disk_analyzer = (program != NULL);
+-        g_free (program);
+-
+         /* We iterate through the static mounts in /etc/fstab first, seeing if
+          * they're mounted by checking if the GUnixMountPoint has a corresponding GUnixMountEntry.
+          * Iterating through the static mounts means we automatically ignore dynamically mounted media.
+@@ -509,7 +506,7 @@ ldsm_check_all_mounts (gpointer data)
+         if (number_of_mounts > number_of_full_mounts)
+                 other_usable_volumes = TRUE;
+ 
+-        ldsm_maybe_warn_mounts (full_mounts, has_disk_analyzer, multiple_volumes,
++        ldsm_maybe_warn_mounts (full_mounts, multiple_volumes,
+                                 other_usable_volumes);
+ 
+         g_list_free (check_mounts);
+--
+cgit v0.8.3.1
diff --git a/gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.1-osd-icons.patch b/gnome-base/gnome-settings-daemon/files/gnome-settings-daemon-2.30.1-osd-icons.patch
new file mode 100644 (file)
index 0000000..536bcc5
--- /dev/null
@@ -0,0 +1,41 @@
+From a2c550b445e6fd3d9c944bf889895f61f8f3e68b Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Fri, 07 May 2010 15:32:06 +0000
+Subject: Fix loading OSD icons when there's no SVG version
+
+In gnome-icon-theme in 2.30.x, there's no SVG icons anymore,
+so the OSD popups won't look like the rest of the system,
+as "hand-drawn" icons will be used instead.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=618023
+---
+diff --git a/plugins/media-keys/gsd-media-keys-window.c b/plugins/media-keys/gsd-media-keys-window.c
+index 4b736e9..2547068 100644
+--- a/plugins/media-keys/gsd-media-keys-window.c
++++ b/plugins/media-keys/gsd-media-keys-window.c
+@@ -208,22 +208,9 @@ load_pixbuf (GsdMediaKeysWindow *window,
+         pixbuf = gtk_icon_theme_load_icon (theme,
+                                            name,
+                                            icon_size,
+-                                           GTK_ICON_LOOKUP_FORCE_SVG,
++                                           GTK_ICON_LOOKUP_FORCE_SIZE,
+                                            NULL);
+ 
+-        /* make sure the pixbuf is close to the requested size
+-         * this is necessary because GTK_ICON_LOOKUP_FORCE_SVG
+-         * seems to be broken */
+-        if (pixbuf != NULL) {
+-                int width;
+-
+-                width = gdk_pixbuf_get_width (pixbuf);
+-                if (width < (float)icon_size * 0.75) {
+-                        g_object_unref (pixbuf);
+-                        pixbuf = NULL;
+-                }
+-        }
+-
+         return pixbuf;
+ }
+ 
+--
+cgit v0.8.3.1
diff --git a/gnome-base/gnome-settings-daemon/gnome-settings-daemon-2.30.1-r1.ebuild b/gnome-base/gnome-settings-daemon/gnome-settings-daemon-2.30.1-r1.ebuild
new file mode 100644 (file)
index 0000000..714cfa9
--- /dev/null
@@ -0,0 +1,93 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-settings-daemon/gnome-settings-daemon-2.30.1-r1.ebuild,v 1.1 2010/06/14 12:08:28 pacho Exp $
+
+EAPI="2"
+
+inherit autotools eutils gnome2
+
+DESCRIPTION="Gnome Settings Daemon"
+HOMEPAGE="http://www.gnome.org"
+SRC_URI="${SRC_URI}
+mirror://gentoo/${PN}-2.28.2-gst-vol-control-support.patch.lzma"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd ~x86-freebsd ~amd64-linux ~x86-linux ~x86-solaris"
+IUSE="debug libnotify pulseaudio"
+
+RDEPEND=">=dev-libs/dbus-glib-0.74
+       >=dev-libs/glib-2.18.0
+       >=x11-libs/gtk+-2.16
+       >=gnome-base/gconf-2.6.1
+       >=gnome-base/libgnomekbd-2.29.5
+       >=gnome-base/gnome-desktop-2.29.92
+
+       x11-libs/libX11
+       x11-libs/libXi
+       x11-libs/libXrandr
+       x11-libs/libXext
+       x11-libs/libXxf86misc
+       >=x11-libs/libxklavier-5.0
+       media-libs/fontconfig
+
+       libnotify? ( >=x11-libs/libnotify-0.4.3 )
+       pulseaudio? (
+               >=media-sound/pulseaudio-0.9.15
+               media-libs/libcanberra[gtk] )
+       !pulseaudio? (
+               >=media-libs/gstreamer-0.10.1.2
+               >=media-libs/gst-plugins-base-0.10.1.2 )"
+DEPEND="${RDEPEND}
+       !<gnome-base/gnome-control-center-2.22
+       sys-devel/gettext
+       >=dev-util/intltool-0.40
+       >=dev-util/pkgconfig-0.19
+       x11-proto/inputproto
+       x11-proto/xproto"
+
+# README is empty
+DOCS="AUTHORS NEWS ChangeLog MAINTAINERS"
+
+pkg_setup() {
+       G2CONF="${G2CONF}
+               --disable-static
+               $(use_enable debug)
+               $(use_with libnotify)
+               $(use_enable pulseaudio pulse)
+               $(use_enable !pulseaudio gstreamer)"
+
+       if use pulseaudio; then
+               elog "Building volume media keys using Pulseaudio"
+       else
+               elog "Building volume media keys using GStreamer"
+       fi
+}
+
+src_prepare() {
+       gnome2_src_prepare
+
+       # Restore gstreamer volume control support, upstream bug #571145
+       epatch "${FILESDIR}/${PN}-2.30.0-gst-vol-control-support.patch"
+
+       # Adjust XF86Display timestamps if they are out of order with RANDR timestamps, upstream bug 610482
+       epatch "${FILESDIR}/${P}-XF86Display.patch"
+
+       # Fix loading OSD icons when there's no SVG version, upstream bug 618023
+       epatch "${FILESDIR}/${P}-osd-icons.patch"
+
+       # housekeeping: Only check for baobob if we're about to show a dialog
+       epatch "${FILESDIR}/${P}-baobob-check.patch"
+
+       intltoolize --force --copy --automake || die "intltoolize failed"
+       eautoreconf
+}
+
+pkg_postinst() {
+       gnome2_pkg_postinst
+
+       if ! use pulseaudio; then
+               elog "GStreamer volume control support is a feature powered by Gentoo GNOME Team"
+               elog "PLEASE DO NOT report bugs upstream, report on https://bugs.gentoo.org instead"
+       fi
+}