Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:aaronbockover
gnome-settings-daemon
gnome-settings-daemon-bnc527361-use-pulse.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gnome-settings-daemon-bnc527361-use-pulse.patch of Package gnome-settings-daemon
Index: gnome-settings-daemon-2.24.0/configure.ac =================================================================== --- gnome-settings-daemon-2.24.0.orig/configure.ac +++ gnome-settings-daemon-2.24.0/configure.ac @@ -226,142 +226,32 @@ AC_SUBST(GIOUNIX_CFLAGS) AC_SUBST(GIOUNIX_LIBS) dnl ============================================== -dnl Esd section +dnl PulseAudio section dnl ============================================== -AC_ARG_ENABLE(esd, - AC_HELP_STRING([--disable-esd], - [turn off ESD audio support]), + +have_pulse=false +AC_ARG_ENABLE(pulse, + AC_HELP_STRING([--disable-pulse], + [turn off PulseAudio support]), [case "${enableval}" in - yes) WANT_ESD=yes ;; - no) WANT_ESD=no ;; - *) AC_MSG_ERROR(bad value ${enableval} for --disable-esd) ;; + yes) WANT_PULSE=yes ;; + no) WANT_PULSE=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --disable-pulse) ;; esac], - [WANT_ESD=yes]) dnl Default value - -if test x$WANT_ESD = xyes ; then - PKG_CHECK_MODULES(ESD, esound >= 0.2.28, - AC_DEFINE(HAVE_ESD, 1, [Define if ESD sound server should be used]), - AC_MSG_RESULT([disabled])) - - GSD_ESD_LOCATION=`pkg-config esound --variable=esd_serverdir` - if test "x$GSD_ESD_LOCATION" != "x"; then - # Add slash so that if the ESD pkgconfig file does not - # specify esd_serverdir, g-s-d will look in the PATH - GSD_ESD_LOCATION="$GSD_ESD_LOCATION/" - fi -fi - -AC_SUBST(ESD_CFLAGS) -AC_SUBST(ESD_LIBS) -AC_SUBST(ESD_LOCATION) - -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_gstreamer" = "xyes"; then - GST_LIBS="$GST_LIBS -lgstinterfaces-0.10 -lgstaudio-0.10" - 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) - -dnl ============================================== -dnl OSS section -dnl ============================================== + [WANT_PULSE=yes]) dnl Default value -have_oss=no -if test "x$have_gstreamer" != "xyes"; then - AC_TRY_COMPILE([ - #ifdef __NetBSD__ - #include <sys/param.h> - #include <sys/sysctl.h> - #include <soundcard.h> - #else - #include <sys/soundcard.h> - #endif - ],[ - int arg = SNDCTL_DSP_SETFRAGMENT; - ],[ - have_oss=yes - ]) - AC_MSG_CHECKING(for OSS audio support) - AC_MSG_RESULT($have_oss) +if test x$WANT_PULSE = xyes ; then + PA_REQUIRED_VERSION=0.9.15 + PKG_CHECK_MODULES(PULSE, glib-2.0 libpulse >= $PA_REQUIRED_VERSION libpulse-mainloop-glib >= $PA_REQUIRED_VERSION, + [have_pulse=true + AC_DEFINE(HAVE_PULSE, 1, [Define if PULSE sound server should be used])], + [have_pulse=false]) fi +AM_CONDITIONAL(HAVE_PULSE, test "x$have_pulse" = "xtrue") -AM_CONDITIONAL(HAVE_OSS, test x"$have_oss" = "xyes") - -dnl ============================================== -dnl ALSA section -dnl ============================================== - -have_alsa=no -if test "x$have_gstreamer" != "xyes"; then - AC_ARG_ENABLE(alsa, - AC_HELP_STRING([--disable-alsa], - [turn off ALSA audio support]), - [case "${enableval}" in - yes) WANT_ALSA=yes ;; - no) WANT_ALSA=no ;; - *) AC_MSG_ERROR(bad value ${enableval} for --disable-alsa) ;; - esac], - [WANT_ALSA=yes]) dnl Default value - - if test x$WANT_ALSA = xyes ; then - PKG_CHECK_MODULES(ALSA, alsa >= 0.9.0, - have_alsa=yes, - AC_MSG_RESULT([disabled])) - fi - - AC_SUBST(ALSA_LIBS) - AC_SUBST(ALSA_CFLAGS) -fi - -AM_CONDITIONAL(HAVE_ALSA, test x"$have_alsa" = "xyes") - -# --------------------------------------------------------------------------- -# Enable Legacy Sound Preference -# --------------------------------------------------------------------------- -PKG_CHECK_MODULES(PULSEAUDIO, libpulse, have_pulseaudio=yes, have_pulseaudio=no) -if test x$have_pulseaudio = xyes; then - default_enable_legacy_sound_pref=no -else - default_enable_legacy_sound_pref=yes -fi -AC_ARG_ENABLE(legacy-sound-pref, - [AC_HELP_STRING([--enable-legacy-sound-pref], - [check for preference to start ESD])], - ,enable_legacy_sound_pref=$default_enable_legacy_sound_pref) -if test "x$enable_legacy_sound_pref" = "xyes"; then - AC_DEFINE(ENABLE_LEGACY_SOUND_PREF,1,[enable preference for ESD startup]) -fi +AC_SUBST(PULSE_CFLAGS) +AC_SUBST(PULSE_LIBS) # --------------------------------------------------------------------------- # Enable Profiling @@ -461,7 +351,7 @@ plugins/housekeeping/Makefile plugins/keybindings/Makefile plugins/keyboard/Makefile plugins/media-keys/Makefile -plugins/media-keys/actions/Makefile +plugins/media-keys/cut-n-paste/Makefile plugins/media-keys/libhal-glib/Makefile plugins/mouse/Makefile plugins/proxy/Makefile @@ -505,10 +395,7 @@ echo " dbus-1 system.d dir: ${DBUS_SYS_DIR} - OSS support: ${have_oss} - ALSA support: ${have_alsa} - GStreamer support: ${have_gstreamer} - ESD support: ${WANT_ESD} + PulseAudio support: ${have_pulse} Profiling support: ${enable_profiling} " Index: gnome-settings-daemon-2.24.0/plugins/media-keys/Makefile.am =================================================================== --- gnome-settings-daemon-2.24.0.orig/plugins/media-keys/Makefile.am +++ gnome-settings-daemon-2.24.0/plugins/media-keys/Makefile.am @@ -1,12 +1,12 @@ NULL = -SUBDIRS = \ - actions \ - libhal-glib \ - $(NULL) +SUBDIRS = libhal-glib +plugin_LTLIBRARIES = -plugin_LTLIBRARIES = \ - libmedia-keys.la +if HAVE_PULSE +SUBDIRS += cut-n-paste +plugin_LTLIBRARIES += libmedia-keys.la +endif BUILT_SOURCES = \ gsd-media-keys-manager-glue.h \ @@ -32,16 +32,17 @@ libmedia_keys_la_SOURCES = \ gsd-media-keys-manager.c \ gsd-media-keys-window.h \ gsd-media-keys-window.c \ + acme.h \ $(BUILT_SOURCES) \ $(NULL) libmedia_keys_la_CPPFLAGS = \ -I$(top_srcdir)/gnome-settings-daemon \ -I$(top_srcdir)/plugins/common \ - -I$(top_builddir)/plugins/media-keys/actions \ + -I$(top_srcdir)/plugins/media-keys/cut-n-paste \ -I$(top_builddir)/plugins/media-keys/libhal-glib \ -DPIXMAPDIR=\""$(pkgdatadir)"\" \ - -DGLADEDIR=\""$(pkgdatadir)"\" \ + -DGTKBUILDERDIR=\""$(pkgdatadir)"\" \ -DGNOME_SETTINGS_LOCALEDIR=\""$(datadir)/locale"\" \ $(AM_CPPFLAGS) @@ -53,17 +54,18 @@ libmedia_keys_la_LDFLAGS = \ $(GSD_PLUGIN_LDFLAGS) libmedia_keys_la_LIBADD = \ - $(top_builddir)/plugins/common/libcommon.la \ - $(top_builddir)/plugins/media-keys/actions/libacme.la \ + $(top_builddir)/plugins/common/libcommon.la \ + $(top_builddir)/plugins/media-keys/cut-n-paste/libgvc.la \ $(top_builddir)/plugins/media-keys/libhal-glib/libhal-glib.la \ - $(SETTINGS_PLUGIN_LIBS) \ - $(XF86MISC_LIBS) \ - $(GST_LIBS) + $(SETTINGS_PLUGIN_LIBS) \ + $(XF86MISC_LIBS) 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 \ @@ -78,10 +80,10 @@ test_media_window_SOURCES = \ test_media_window_CPPFLAGS = \ -I$(top_srcdir)/gnome-settings-daemon \ - -I$(top_builddir)/plugins/media-keys/actions \ + -I$(top_srcdir)/plugins/media-keys/cut-n-paste \ -I$(top_builddir)/plugins/media-keys/libhal-glib \ -DPIXMAPDIR=\""$(pkgdatadir)"\" \ - -DGLADEDIR=\""$(pkgdatadir)"\" \ + -DGTKBUILDERDIR=\""$(pkgdatadir)"\" \ -DGNOME_SETTINGS_LOCALEDIR=\""$(datadir)/locale"\" \ $(AM_CPPFLAGS) @@ -107,10 +109,10 @@ test_media_keys_SOURCES = \ test_media_keys_CPPFLAGS = \ -I$(top_srcdir)/gnome-settings-daemon \ -I$(top_srcdir)/plugins/common \ - -I$(top_builddir)/plugins/media-keys/actions \ + -I$(top_srcdir)/plugins/media-keys/cut-n-paste \ -I$(top_builddir)/plugins/media-keys/libhal-glib \ -DPIXMAPDIR=\""$(pkgdatadir)"\" \ - -DGLADEDIR=\""$(pkgdatadir)"\" \ + -DGTKBUILDERDIR=\""$(pkgdatadir)"\" \ -DGNOME_SETTINGS_LOCALEDIR=\""$(datadir)/locale"\" \ $(AM_CPPFLAGS) @@ -119,19 +121,36 @@ test_media_keys_CFLAGS = \ $(AM_CFLAGS) test_media_keys_LDADD = \ - $(top_builddir)/gnome-settings-daemon/libgsd-profile.la \ - $(top_builddir)/plugins/common/libcommon.la \ - $(top_builddir)/plugins/media-keys/actions/libacme.la \ + $(top_builddir)/gnome-settings-daemon/libgsd-profile.la \ + $(top_builddir)/plugins/common/libcommon.la \ $(top_builddir)/plugins/media-keys/libhal-glib/libhal-glib.la \ $(SETTINGS_DAEMON_LIBS) \ $(SETTINGS_PLUGIN_LIBS) \ $(XF86MISC_LIBS) \ $(GST_LIBS) +if HAVE_PULSE +test_media_keys_LDADD += $(top_builddir)/plugins/media-keys/cut-n-paste/libgvc.la +endif + +gtkbuilderdir = $(pkgdatadir) +gtkbuilder_DATA = \ + acme.ui \ + $(NULL) + +pixmapsdir = $(pkgdatadir) +pixmaps_DATA = \ + acme-eject.png \ + $(NULL) + +DIST_SUBDIRS = cut-n-paste + EXTRA_DIST = \ gsd-media-keys-manager.xml \ gsd-marshal.list \ - $(plugin_in_files) + $(plugin_in_files) \ + $(gtkbuilder_DATA) \ + $(pixmaps_DATA) CLEANFILES = \ $(BUILT_SOURCES) \ Index: gnome-settings-daemon-2.24.0/plugins/media-keys/gsd-media-keys-manager.c =================================================================== --- gnome-settings-daemon-2.24.0.orig/plugins/media-keys/gsd-media-keys-manager.c +++ gnome-settings-daemon-2.24.0/plugins/media-keys/gsd-media-keys-manager.c @@ -56,16 +56,20 @@ #include "gsd-media-keys-manager-glue.h" #include "eggaccelerators.h" -#include "actions/acme.h" -#include "actions/acme-volume.h" +#include "acme.h" #include "gsd-media-keys-window.h" +#ifdef HAVE_PULSE +#include "gvc-mixer-control.h" +#endif /* HAVE_PULSE */ + #define GSD_DBUS_PATH "/org/gnome/SettingsDaemon" #define GSD_DBUS_NAME "org.gnome.SettingsDaemon" #define GSD_MEDIA_KEYS_DBUS_PATH GSD_DBUS_PATH "/MediaKeys" #define GSD_MEDIA_KEYS_DBUS_NAME GSD_DBUS_NAME ".MediaKeys" #define VOLUME_STEP 6 /* percents for one volume button press */ +#define MAX_VOLUME 65536.0 #define GSD_MEDIA_KEYS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_MEDIA_KEYS_MANAGER, GsdMediaKeysManagerPrivate)) @@ -76,7 +80,11 @@ typedef struct { struct GsdMediaKeysManagerPrivate { - AcmeVolume *volume; +#ifdef HAVE_PULSE + /* Volume bits */ + GvcMixerControl *volume; + GvcMixerStream *stream; +#endif /* HAVE_PULSE */ GtkWidget *dialog; GConfClient *conf_client; HalDevice *hk_device; @@ -630,19 +638,19 @@ do_eject_action (GsdMediaKeysManager *ma g_free (command); } +#ifdef HAVE_PULSE static void do_sound_action (GsdMediaKeysManager *manager, int type) { gboolean muted; gboolean toggle_mute; - int vol; - int vol_step; + guint vol, norm_vol_step; + int vol_step; GError *error = NULL; - if (manager->priv->volume == NULL) { + if (manager->priv->stream == NULL) return; - } vol_step = gconf_client_get_int (manager->priv->conf_client, GCONF_MISC_DIR "/volume_step", @@ -653,6 +661,7 @@ do_sound_action (GsdMediaKeysManager *ma g_error_free (error); } + norm_vol_step = PA_VOLUME_NORM * vol_step / 100; toggle_mute = gconf_client_get_bool (manager->priv->conf_client, GCONF_MISC_DIR "/toggle_mute", &error); @@ -662,51 +671,65 @@ do_sound_action (GsdMediaKeysManager *ma g_error_free (error); } - if (vol_step > 0) { - int threshold = acme_volume_get_threshold (manager->priv->volume); - if (vol_step < threshold) - vol_step = threshold; - } /* FIXME: this is racy */ - vol = acme_volume_get_volume (manager->priv->volume); - muted = acme_volume_get_mute (manager->priv->volume); + vol = gvc_mixer_stream_get_volume (manager->priv->stream); + muted = gvc_mixer_stream_get_is_muted (manager->priv->stream); switch (type) { case MUTE_KEY: + muted = !muted; if (toggle_mute) - acme_volume_mute_toggle (manager->priv->volume); + gvc_mixer_stream_change_is_muted (manager->priv->stream, + muted); else - acme_volume_set_mute (manager->priv->volume, TRUE); + gvc_mixer_stream_change_is_muted (manager->priv->stream, + TRUE); break; case VOLUME_DOWN_KEY: - if (!muted && (vol <= vol_step)) { - acme_volume_mute_toggle (manager->priv->volume); + if (!muted && (vol <= norm_vol_step)) { + muted = !muted; + vol = 0; + gvc_mixer_stream_change_is_muted (manager->priv->stream, muted); + if (gvc_mixer_stream_set_volume (manager->priv->stream, vol) != FALSE) + gvc_mixer_stream_push_volume (manager->priv->stream); + } else if (!muted) { + vol = vol - norm_vol_step; + if (gvc_mixer_stream_set_volume (manager->priv->stream, vol) != FALSE) + gvc_mixer_stream_push_volume (manager->priv->stream); } - acme_volume_set_volume (manager->priv->volume, vol - vol_step); break; case VOLUME_UP_KEY: if (muted) { + muted = !muted; if (vol == 0) { - acme_volume_set_volume (manager->priv->volume, vol + vol_step); + 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) + gvc_mixer_stream_push_volume (manager->priv->stream); + } else { + gvc_mixer_stream_change_is_muted (manager->priv->stream, muted); } - acme_volume_mute_toggle (manager->priv->volume); } else { - acme_volume_set_volume (manager->priv->volume, vol + vol_step); + if (vol < MAX_VOLUME) { + gboolean set; + if (vol + norm_vol_step >= MAX_VOLUME) { + vol = MAX_VOLUME; + } else { + vol = vol + norm_vol_step; + } + if (gvc_mixer_stream_set_volume (manager->priv->stream, vol) != FALSE) + gvc_mixer_stream_push_volume (manager->priv->stream); + } } break; } - muted = acme_volume_get_mute (manager->priv->volume); - vol = acme_volume_get_volume (manager->priv->volume); - - /* FIXME: AcmeVolume should probably emit signals - instead of doing it like this */ dialog_init (manager); gsd_media_keys_window_set_volume_muted (GSD_MEDIA_KEYS_WINDOW (manager->priv->dialog), muted); gsd_media_keys_window_set_volume_level (GSD_MEDIA_KEYS_WINDOW (manager->priv->dialog), - vol); + (int) (100 * (double)vol / PA_VOLUME_NORM)); gsd_media_keys_window_set_volume_step (GSD_MEDIA_KEYS_WINDOW (manager->priv->dialog), vol_step); gsd_media_keys_window_set_is_mute_key (GSD_MEDIA_KEYS_WINDOW (manager->priv->dialog), @@ -717,6 +740,44 @@ do_sound_action (GsdMediaKeysManager *ma } static void +update_default_sink (GsdMediaKeysManager *manager) +{ + GvcMixerStream *stream; + + stream = gvc_mixer_control_get_default_sink (manager->priv->volume); + if (stream == manager->priv->stream) + return; + + if (manager->priv->stream != NULL) { + g_object_unref (manager->priv->stream); + manager->priv->stream = NULL; + } + + if (stream != NULL) { + manager->priv->stream = g_object_ref (stream); + } else { + g_warning ("Unable to get default sink"); + } +} + +static void +on_control_ready (GvcMixerControl *control, + GsdMediaKeysManager *manager) +{ + update_default_sink (manager); +} + +static void +on_control_default_sink_changed (GvcMixerControl *control, + guint id, + GsdMediaKeysManager *manager) +{ + update_default_sink (manager); +} + +#endif /* HAVE_PULSE */ + +static void do_sleep_action (GsdMediaKeysManager *manager, char *cmd1, char *cmd2) @@ -1292,7 +1353,9 @@ do_action (GsdMediaKeysManager *manager, case MUTE_KEY: case VOLUME_DOWN_KEY: case VOLUME_UP_KEY: +#ifdef HAVE_PULSE do_sound_action (manager, type); +#endif /* HAVE_PULSE */ break; case POWER_KEY: do_exit_action (manager); @@ -1537,10 +1600,30 @@ gsd_media_keys_manager_start (GsdMediaKe g_error_free (gconf_error); } - /* initialise Volume handler */ - gnome_settings_profile_start ("acme_volume_new"); - manager->priv->volume = acme_volume_new (); - gnome_settings_profile_end ("acme_volume_new"); +#ifdef HAVE_PULSE + /* initialise Volume handler + * + * We do this one here to force checking gstreamer cache, etc. + * The rest (grabbing and setting the keys) can happen in an + * idle. + */ + gnome_settings_profile_start ("gvc_mixer_control_new"); + + manager->priv->volume = gvc_mixer_control_new ("GNOME Volume Control Media Keys"); + + g_signal_connect (manager->priv->volume, + "ready", + G_CALLBACK (on_control_ready), + manager); + g_signal_connect (manager->priv->volume, + "default-sink-changed", + G_CALLBACK (on_control_default_sink_changed), + manager); + + gvc_mixer_control_open (manager->priv->volume); + + gnome_settings_profile_end ("gvc_mixer_control_new"); +#endif /* HAVE_PULSE */ /* Start filtering the events */ for (l = manager->priv->screens; l != NULL; l = l->next) { @@ -1637,11 +1720,17 @@ gsd_media_keys_manager_stop (GsdMediaKey g_free(keys[i].hk_cond_detail); keys[i].hk_cond_detail = NULL; } +#ifdef HAVE_PULSE + if (priv->stream) { + g_object_unref (priv->stream); + priv->stream = NULL; + } if (priv->volume) { g_object_unref (priv->volume); priv->volume = NULL; } +#endif /* HAVE_PULSE */ if (priv->dialog != NULL) { gtk_widget_destroy (priv->dialog); Index: gnome-settings-daemon-2.24.0/plugins/media-keys/gsd-media-keys-window.c =================================================================== --- gnome-settings-daemon-2.24.0.orig/plugins/media-keys/gsd-media-keys-window.c +++ gnome-settings-daemon-2.24.0/plugins/media-keys/gsd-media-keys-window.c @@ -27,8 +27,6 @@ #include <glib/gi18n.h> #include <gtk/gtk.h> -#include <glade/glade.h> - #include "gsd-media-keys-window.h" #define DIALOG_TIMEOUT 2000 /* dialog timeout in ms */ @@ -1436,21 +1434,29 @@ gsd_media_keys_window_init (GsdMediaKeys window->priv->fade_out_alpha = 1.0; } else { - GladeXML *xml; + GtkBuilder *builder; + gchar *objects[] = {"acme_frame", NULL}; GtkWidget *frame; - xml = glade_xml_new (GLADEDIR "/acme.glade", "acme_frame", NULL); - - window->priv->image = GTK_IMAGE (glade_xml_get_widget (xml, "acme_image")); - window->priv->progress = glade_xml_get_widget (xml, "acme_volume_progressbar"); - frame = glade_xml_get_widget (xml, "acme_frame"); - - g_object_unref (xml); + builder = gtk_builder_new (); + gtk_builder_add_objects_from_file (builder, + GTKBUILDERDIR "/acme.ui", + objects, + NULL); + + window->priv->image = GTK_IMAGE (gtk_builder_get_object (builder, "acme_image")); + window->priv->progress = GTK_WIDGET (gtk_builder_get_object (builder, "acme_volume_progressbar")); + frame = GTK_WIDGET (gtk_builder_get_object (builder, + "acme_frame")); if (frame != NULL) { gtk_container_add (GTK_CONTAINER (window), frame); gtk_widget_show_all (frame); } + + /* The builder needs to stay alive until the window + takes ownership of the frame (and its children) */ + g_object_unref (builder); } }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor