patches/gnome-settings-daemon-11-gst-mediakeys.diff
author yippi
Mon, 27 Sep 2010 21:07:51 +0000
changeset 20108 51df67ca9307
parent 18220 14c4093b6689
permissions -rw-r--r--
I had these modules listed as being owned by me, but they are really owned by wangke, correcting.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     1
diff --git a/configure.ac b/configure.ac
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     2
index 5fada1a..b450ff0 100644
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     3
--- a/configure.ac
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     4
+++ b/configure.ac
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     5
@@ -271,6 +271,48 @@ AM_CONDITIONAL(HAVE_PULSE, test "x$have_
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     6
 AC_SUBST(PULSE_CFLAGS)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     7
 AC_SUBST(PULSE_LIBS)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     8
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     9
+dnl ==============================================
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    10
+dnl GStreamer section
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    11
+dnl ==============================================
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    12
+GST_MAJORMINOR=auto
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    13
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    14
+AC_ARG_ENABLE(gstreamer,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    15
+AC_HELP_STRING([--enable-gstreamer],[use gstreamer if available (and optionally specify a version)]),
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    16
+[case "${enableval}" in
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    17
+ yes) ENABLE_GSTREAMER=yes ;;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    18
+ 0.10) ENABLE_GSTREAMER=yes && GST_MAJORMINOR=0.10 ;;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    19
+ no)  ENABLE_GSTREAMER=no ;;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    20
+ *) AC_MSG_ERROR([
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    21
+                  *** Bad value ${enableval} for --enable-gstreamer
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    22
+                  *** Please use one of the following:
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    23
+                  ***    --enable-gstreamer=0.10
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    24
+               ]) ;;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    25
+esac],
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    26
+[ENABLE_GSTREAMER=yes]) dnl Default value
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    27
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    28
+have_gstreamer=no
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    29
+if test "x$ENABLE_GSTREAMER" = "xyes"; then
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    30
+   GST_REQS=0.10.1.2
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    31
+   PKGS="gstreamer-0.10 >= $GST_REQS gstreamer-plugins-base-0.10 >= $GST_REQS"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    32
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    33
+   PKG_CHECK_MODULES(GST, $PKGS, have_gstreamer=yes,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    34
+                     AC_MSG_RESULT([no]))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    35
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    36
+   if test "x$have_pulse" = "xtrue"; then
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    37
+      AC_MSG_ERROR([*** GStreamer & Pulseaudio both are selected ***])
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    38
+   fi
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    39
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    40
+   if test "x$have_gstreamer" = "xyes"; then
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    41
+      GST_LIBS="$GST_LIBS -lgstinterfaces-0.10 -lgstaudio-0.10"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    42
+      AC_DEFINE(HAVE_GSTREAMER,1,[enable gstreamer])
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    43
+   fi
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    44
+else
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    45
+   AC_MSG_NOTICE([*** GStreamer support disabled ***])
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    46
+fi
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    47
+AM_CONDITIONAL(HAVE_GSTREAMER, test "x$have_gstreamer" = "xyes")
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    48
+AC_SUBST(GST_LIBS)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    49
+AC_SUBST(GST_CFLAGS)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    50
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    51
 # ---------------------------------------------------------------------------
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    52
 # Enable Profiling
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    53
 # ---------------------------------------------------------------------------
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    54
@@ -409,6 +451,7 @@ echo "
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    55
         dbus-1 system.d dir:      ${DBUS_SYS_DIR}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    56
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    57
         Libnotify support:        ${have_libnotify}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    58
+        GStreamer support:        ${have_gstreamer}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    59
         PulseAudio support:       ${have_pulse}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    60
         Profiling support:        ${enable_profiling}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    61
 "
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    62
diff --git a/plugins/media-keys/Makefile.am b/plugins/media-keys/Makefile.am
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    63
index fae8a5e..edb215e 100644
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    64
--- a/plugins/media-keys/Makefile.am
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    65
+++ b/plugins/media-keys/Makefile.am
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    66
diff --git a/plugins/media-keys/cut-n-paste/Makefile.am b/plugins/media-keys/cut-n-paste/Makefile.am
18220
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    67
@@ -3,13 +3,8 @@ context = actions
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    68
 
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    69
 NULL =
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    70
 
18220
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    71
-SUBDIRS =
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    72
-plugin_LTLIBRARIES =
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    73
-
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    74
-if HAVE_PULSE
18220
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    75
-SUBDIRS += cut-n-paste
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    76
-plugin_LTLIBRARIES += libmedia-keys.la
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    77
-endif
18220
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    78
+SUBDIRS = cut-n-paste
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    79
+plugin_LTLIBRARIES = libmedia-keys.la
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    80
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    81
 BUILT_SOURCES = 			\
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    82
 	gsd-media-keys-manager-glue.h	\
18220
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    83
@@ -108,9 +103,7 @@ libmedia_keys_la_LIBADD  = 		\
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    84
 plugin_in_files = 		\
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    85
 	media-keys.gnome-settings-plugin.in
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    86
 
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    87
-if HAVE_PULSE
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    88
 plugin_DATA = $(plugin_in_files:.gnome-settings-plugin.in=.gnome-settings-plugin)
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    89
-endif
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    90
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    91
 noinst_PROGRAMS =				\
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    92
 	test-media-keys				\
18220
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
    93
@@ -176,9 +169,7 @@ test_media_keys_LDADD = \
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    94
 	$(GST_LIBS)				\
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    95
 	-lm
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    96
 
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    97
-if HAVE_PULSE
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    98
 test_media_keys_LDADD += $(top_builddir)/plugins/media-keys/cut-n-paste/libgvc.la
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
    99
-endif
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   100
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   101
 gtkbuilderdir = $(pkgdatadir)
17845
8cdfd55226b6 Fix error in last commit.
yippi
parents: 17844
diff changeset
   102
 gtkbuilder_DATA =	\
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   103
index bc59a10..6486ac0 100644
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   104
--- a/plugins/media-keys/cut-n-paste/Makefile.am
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   105
+++ b/plugins/media-keys/cut-n-paste/Makefile.am
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   106
@@ -4,16 +4,24 @@ noinst_LTLIBRARIES = libgvc.la
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   107
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   108
 INCLUDES =					\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   109
 	$(WARN_CFLAGS)				\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   110
-	$(VOLUME_CONTROL_CFLAGS)		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   111
-	$(PULSE_CFLAGS)				\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   112
 	$(NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   113
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   114
 libgvc_la_LIBADD =		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   115
-	$(VOLUME_CONTROL_LIBS)	\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   116
-	$(PULSE_LIBS)		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   117
 	$(NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   118
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   119
 libgvc_la_SOURCES =			\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   120
+	$(NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   121
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   122
+if HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   123
+INCLUDES +=					\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   124
+	$(VOLUME_CONTROL_CFLAGS)		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   125
+	$(PULSE_CFLAGS)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   126
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   127
+libgvc_la_LIBADD +=		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   128
+	$(VOLUME_CONTROL_LIBS)	\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   129
+	$(PULSE_LIBS)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   130
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   131
+libgvc_la_SOURCES +=			\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   132
 	gvc-mixer-stream.h		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   133
 	gvc-mixer-stream.c		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   134
 	gvc-channel-map.h		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   135
@@ -31,8 +39,22 @@ libgvc_la_SOURCES =			\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   136
 	gvc-mixer-event-role.h		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   137
 	gvc-mixer-event-role.c		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   138
 	gvc-mixer-control.h		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   139
-	gvc-mixer-control.c		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   140
-	$(NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   141
+	gvc-mixer-control.c
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   142
+endif
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   143
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   144
+if HAVE_GSTREAMER
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   145
+INCLUDES +=					\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   146
+	$(SETTINGS_PLUGIN_CFLAGS)		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   147
+	$(AM_CFLAGS)				\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   148
+	$(GST_CFLAGS)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   149
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   150
+libgvc_la_LIBADD +=		\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   151
+	$(GST_LIBS)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   152
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   153
+libgvc_la_SOURCES +=			\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   154
+	gvc-gstreamer-acme-vol.c	\
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   155
+	gvc-gstreamer-acme-vol.h
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   156
+endif
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   157
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   158
 MAINTAINERCLEANFILES =                  \
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   159
         *~                              \
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   160
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
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   161
new file mode 100644
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   162
index 0000000..8948480
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   163
--- /dev/null
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   164
+++ b/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.c
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   165
@@ -0,0 +1,472 @@
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   166
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   167
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   168
+/* acme-volume.c
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   169
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   170
+   Copyright (C) 2002, 2003 Bastien Nocera
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   171
+   Copyright (C) 2004 Novell, Inc.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   172
+   Copyright (C) 2009 PERIER Romain <[email protected]>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   173
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   174
+   The Gnome Library is free software; you can redistribute it and/or
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   175
+   modify it under the terms of the GNU Library General Public License as
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   176
+   published by the Free Software Foundation; either version 2 of the
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   177
+   License, or (at your option) any later version.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   178
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   179
+   The Gnome Library is distributed in the hope that it will be useful,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   180
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   181
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   182
+   Library General Public License for more details.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   183
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   184
+   You should have received a copy of the GNU Library General Public
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   185
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   186
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   187
+   Boston, MA 02111-1307, USA.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   188
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   189
+   Author: Bastien Nocera <[email protected]>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   190
+           Jon Trowbridge <[email protected]>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   191
+*/
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   192
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   193
+#include "config.h"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   194
+#include "gvc-gstreamer-acme-vol.h"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   195
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   196
+#include <glib.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   197
+#include <glib/gi18n.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   198
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   199
+#include <gst/gst.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   200
+#include <gst/audio/mixerutils.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   201
+#include <gst/interfaces/mixer.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   202
+#include <gst/interfaces/propertyprobe.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   203
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   204
+#include <gconf/gconf-client.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   205
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   206
+#include <string.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   207
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   208
+#define TIMEOUT	2
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   209
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   210
+#define DEFAULT_MIXER_DEVICE_KEY   "/desktop/gnome/sound/default_mixer_device"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   211
+#define DEFAULT_MIXER_TRACKS_KEY   "/desktop/gnome/sound/default_mixer_tracks"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   212
+#define GNOME_VOLUME_CONTROL_KEY_ACTIVE_ELEMENT "/apps/gnome-volume-control/active-element"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   213
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   214
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   215
+#define ACME_VOLUME_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ACME_TYPE_VOLUME, AcmeVolumePrivate))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   216
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   217
+struct AcmeVolumePrivate {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   218
+	GstMixer     *mixer;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   219
+	GList        *mixer_tracks;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   220
+	guint         timer_id;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   221
+	gdouble       volume;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   222
+	gboolean      mute;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   223
+	GConfClient  *gconf_client;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   224
+	gchar        *gvc_mixer;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   225
+	gboolean     found_mixer;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   226
+};
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   227
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   228
+G_DEFINE_TYPE (AcmeVolume, acme_volume, G_TYPE_OBJECT)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   229
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   230
+static gboolean acme_volume_open  (AcmeVolume *acme);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   231
+static void     acme_volume_close (AcmeVolume *acme);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   232
+static gboolean acme_volume_close_real (AcmeVolume *self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   233
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   234
+static gpointer acme_volume_object = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   235
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   236
+static void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   237
+acme_volume_finalize (GObject *object)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   238
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   239
+	AcmeVolume *self;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   240
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   241
+	g_return_if_fail (object != NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   242
+	g_return_if_fail (ACME_IS_VOLUME (object));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   243
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   244
+	self = ACME_VOLUME (object);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   245
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   246
+	if (self->_priv->timer_id != 0)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   247
+		g_source_remove (self->_priv->timer_id);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   248
+	acme_volume_close_real (self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   249
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   250
+	if (self->_priv->gconf_client != NULL) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   251
+		g_object_unref (self->_priv->gconf_client);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   252
+		self->_priv->gconf_client = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   253
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   254
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   255
+	G_OBJECT_CLASS (acme_volume_parent_class)->finalize (object);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   256
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   257
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   258
+void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   259
+acme_volume_set_mute (AcmeVolume *self, gboolean val)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   260
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   261
+	GList *t;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   262
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   263
+	g_return_if_fail(ACME_IS_VOLUME(self));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   264
+	g_return_if_fail(acme_volume_open(self));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   265
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   266
+	for (t = self->_priv->mixer_tracks; t != NULL; t = t->next) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   267
+		GstMixerTrack *track = GST_MIXER_TRACK (t->data);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   268
+		gst_mixer_set_mute (self->_priv->mixer, track, val);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   269
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   270
+	self->_priv->mute = val;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   271
+	acme_volume_close (self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   272
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   273
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   274
+static void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   275
+update_state (AcmeVolume * self)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   276
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   277
+	gint *volumes, n;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   278
+	gdouble vol = 0;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   279
+	GstMixerTrack *track = GST_MIXER_TRACK (self->_priv->mixer_tracks->data);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   280
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   281
+	/* update mixer by getting volume */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   282
+	volumes = g_new0 (gint, track->num_channels);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   283
+	gst_mixer_get_volume (self->_priv->mixer, track, volumes);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   284
+	for (n = 0; n < track->num_channels; n++)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   285
+		vol += volumes[n];
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   286
+	g_free (volumes);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   287
+	vol /= track->num_channels;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   288
+	vol = 100 * vol / (track->max_volume - track->min_volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   289
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   290
+	/* update mute flag, and volume if not muted */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   291
+	if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MUTE))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   292
+		self->_priv->mute = TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   293
+	self->_priv->volume = vol;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   294
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   295
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   296
+gboolean
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   297
+acme_volume_get_mute (AcmeVolume *self)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   298
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   299
+	g_return_val_if_fail(acme_volume_open(self), FALSE);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   300
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   301
+	update_state (self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   302
+	acme_volume_close (self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   303
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   304
+	return self->_priv->mute;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   305
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   306
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   307
+gint
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   308
+acme_volume_get_volume (AcmeVolume *self)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   309
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   310
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   311
+	g_return_val_if_fail(acme_volume_open(self), 0);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   312
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   313
+	update_state (self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   314
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   315
+	acme_volume_close (self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   316
+	
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   317
+	return (gint) (self->_priv->volume + 0.5);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   318
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   319
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   320
+void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   321
+acme_volume_set_volume (AcmeVolume *self, gint val)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   322
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   323
+	GList *t;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   324
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   325
+	g_return_if_fail(acme_volume_open(self));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   326
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   327
+	val = CLAMP (val, 0, 100);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   328
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   329
+	for (t = self->_priv->mixer_tracks; t != NULL; t = t->next) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   330
+		GstMixerTrack *track = GST_MIXER_TRACK (t->data);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   331
+		gint *volumes, n;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   332
+		gdouble scale = (track->max_volume - track->min_volume) / 100.0;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   333
+		gint vol = (gint) (val * scale + track->min_volume + 0.5);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   334
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   335
+		volumes = g_new (gint, track->num_channels);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   336
+		for (n = 0; n < track->num_channels; n++)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   337
+			volumes[n] = vol;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   338
+		gst_mixer_set_volume (self->_priv->mixer, track, volumes);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   339
+		g_free (volumes);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   340
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   341
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   342
+	/* update state */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   343
+	self->_priv->volume = val;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   344
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   345
+	acme_volume_close (self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   346
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   347
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   348
+void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   349
+acme_volume_mute_toggle (AcmeVolume *self)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   350
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   351
+	gboolean muted;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   352
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   353
+	g_return_if_fail (self != NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   354
+	g_return_if_fail (ACME_IS_VOLUME(self));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   355
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   356
+	muted = acme_volume_get_mute(self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   357
+	acme_volume_set_mute(self, !muted);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   358
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   359
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   360
+gint
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   361
+acme_volume_get_threshold (AcmeVolume *self)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   362
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   363
+	GList *t;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   364
+	gint steps = 101;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   365
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   366
+	g_return_val_if_fail(acme_volume_open(self), 1);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   367
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   368
+	for (t = self->_priv->mixer_tracks; t != NULL; t = t->next) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   369
+		GstMixerTrack *track = GST_MIXER_TRACK (t->data);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   370
+		gint track_steps = track->max_volume - track->min_volume;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   371
+		if (track_steps > 0 && track_steps < steps)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   372
+			steps = track_steps;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   373
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   374
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   375
+	acme_volume_close (self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   376
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   377
+	return 100 / steps + 1;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   378
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   379
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   380
+static gboolean
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   381
+acme_volume_close_real (AcmeVolume *self)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   382
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   383
+	if (self->_priv->mixer != NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   384
+	{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   385
+		gst_element_set_state (GST_ELEMENT (self->_priv->mixer), GST_STATE_NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   386
+		gst_object_unref (GST_OBJECT (self->_priv->mixer));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   387
+		g_list_foreach (self->_priv->mixer_tracks, (GFunc) g_object_unref, NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   388
+		g_list_free (self->_priv->mixer_tracks);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   389
+		self->_priv->mixer = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   390
+		self->_priv->mixer_tracks = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   391
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   392
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   393
+	self->_priv->timer_id = 0;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   394
+	return FALSE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   395
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   396
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   397
+/*
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   398
+ * _acme_set_mixer
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   399
+ * @mixer  A pointer to mixer element
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   400
+ * @data   A pointer to user data (AcmeVolume instance to be modified)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   401
+ * @return A gboolean indicating success if Master track was found, failed otherwises.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   402
+ */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   403
+static gboolean
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   404
+_acme_set_mixer(GstMixer *mixer, gpointer user_data)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   405
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   406
+	GstElementFactory *factory;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   407
+	const GList *tracks;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   408
+	const gchar *long_name;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   409
+	gchar *devname = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   410
+	gchar *name;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   411
+	int p_count = 0;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   412
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   413
+	for (tracks = gst_mixer_list_tracks (mixer); tracks != NULL; tracks = tracks->next) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   414
+		GstMixerTrack *track = GST_MIXER_TRACK (tracks->data);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   415
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   416
+		if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MASTER)) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   417
+			AcmeVolume *self;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   418
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   419
+			if (g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (mixer)),
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   420
+							  "device-name")) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   421
+				g_object_get (mixer, "device-name", &devname, NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   422
+			} else {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   423
+				devname = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   424
+			}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   425
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   426
+			factory = gst_element_get_factory (GST_ELEMENT (mixer));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   427
+			long_name = gst_element_factory_get_longname (factory);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   428
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   429
+			if (devname) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   430
+				name = g_strdup_printf ("%s (%s)", devname, long_name);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   431
+				g_free (devname);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   432
+			} else {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   433
+				gchar *title;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   434
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   435
+				p_count += 1;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   436
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   437
+				title = g_strdup_printf (_("Unknown Volume Control %d"),  p_count);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   438
+				name = g_strdup_printf ("%s (%s)", title, long_name);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   439
+				g_free (title);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   440
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   441
+			}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   442
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   443
+			self = ACME_VOLUME (user_data);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   444
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   445
+			/*
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   446
+			 * Check to see if the mixer is the one defined as being used by
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   447
+			 * gnome-volume-control.  If so, use this one.  Otherwise return
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   448
+			 * the first one.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   449
+			 */ 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   450
+			if ((self->_priv->gvc_mixer != NULL &&
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   451
+			     strcmp (name, self->_priv->gvc_mixer) == 0) ||
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   452
+			    (self->_priv->found_mixer == FALSE)) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   453
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   454
+				self->_priv->found_mixer = TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   455
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   456
+				if (self->_priv->mixer != NULL) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   457
+					/* If we set a previous mixer, free it */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   458
+					gst_element_set_state (GST_ELEMENT (self->_priv->mixer), GST_STATE_NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   459
+				}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   460
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   461
+				self->_priv->mixer = mixer;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   462
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   463
+				/* Free any previously set mixer tracks */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   464
+				if (self->_priv->mixer_tracks != NULL) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   465
+					g_list_foreach (self->_priv->mixer_tracks, (GFunc) g_object_unref, NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   466
+					g_list_free (self->_priv->mixer_tracks);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   467
+					self->_priv->mixer_tracks = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   468
+				}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   469
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   470
+				self->_priv->mixer_tracks = g_list_append (self->_priv->mixer_tracks, g_object_ref (track));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   471
+				return TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   472
+			} else {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   473
+				return FALSE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   474
+			}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   475
+		}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   476
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   477
+		continue;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   478
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   479
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   480
+	return FALSE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   481
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   482
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   483
+/* This is a modified version of code from gnome-media's gst-mixer */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   484
+static gboolean
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   485
+acme_volume_open (AcmeVolume *self)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   486
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   487
+	gchar *mixer_device, **factory_and_device = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   488
+	GList *mixer_list;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   489
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   490
+	if (self->_priv->timer_id != 0) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   491
+		g_source_remove (self->_priv->timer_id);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   492
+		self->_priv->timer_id = 0;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   493
+		return TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   494
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   495
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   496
+	mixer_device = gconf_client_get_string (self->_priv->gconf_client, DEFAULT_MIXER_DEVICE_KEY, NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   497
+        self->_priv->gvc_mixer = gconf_client_get_string (self->_priv->gconf_client,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   498
+                                 GNOME_VOLUME_CONTROL_KEY_ACTIVE_ELEMENT,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   499
+                                 NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   500
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   501
+	if (mixer_device != NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   502
+		factory_and_device = g_strsplit (mixer_device, ":", 2);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   503
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   504
+	if (factory_and_device != NULL && factory_and_device[0] != NULL) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   505
+		GstElement *element;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   506
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   507
+		element = gst_element_factory_make (factory_and_device[0], NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   508
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   509
+		if (element != NULL) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   510
+			if (factory_and_device[1] != NULL &&
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   511
+			    g_object_class_find_property (G_OBJECT_GET_CLASS (element), "device"))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   512
+				g_object_set (G_OBJECT (element), "device", factory_and_device[1], NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   513
+			gst_element_set_state (element, GST_STATE_READY);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   514
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   515
+			if (GST_IS_MIXER (element))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   516
+				self->_priv->mixer = GST_MIXER (element);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   517
+			else {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   518
+				gst_element_set_state (element, GST_STATE_NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   519
+				gst_object_unref (element);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   520
+			}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   521
+		}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   522
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   523
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   524
+	g_free (mixer_device);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   525
+	g_strfreev (factory_and_device);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   526
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   527
+	if (self->_priv->mixer != NULL) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   528
+		const GList *m;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   529
+		GSList *tracks, *t;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   530
+		GError *error = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   531
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   532
+		/* Try to use tracks saved in GConf 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   533
+		   Note: errors need to be treated , for example if the user set a non type list for this key
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   534
+		   or if the elements type_list are not "matched" */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   535
+		tracks = gconf_client_get_list (self->_priv->gconf_client, DEFAULT_MIXER_TRACKS_KEY, 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   536
+						GCONF_VALUE_STRING, &error);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   537
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   538
+		if (error) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   539
+			g_warning("ERROR: %s\n", error->message);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   540
+			g_error_free(error);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   541
+		}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   542
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   543
+		/* We use these tracks ONLY if they are supported on the system with the following mixer */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   544
+		for (m = gst_mixer_list_tracks (self->_priv->mixer); m != NULL; m = m->next) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   545
+			GstMixerTrack *track = GST_MIXER_TRACK (m->data);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   546
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   547
+			for (t = tracks; t != NULL; t = t->next)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   548
+				if (!strcmp (t->data, track->label))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   549
+					self->_priv->mixer_tracks = g_list_append (self->_priv->mixer_tracks, g_object_ref (track));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   550
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   551
+		}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   552
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   553
+		g_slist_foreach (tracks, (GFunc)g_free, NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   554
+		g_slist_free (tracks);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   555
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   556
+		/* If no track stored in GConf is avaiable try to use Master track */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   557
+		if (self->_priv->mixer_tracks == NULL) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   558
+			for (m = gst_mixer_list_tracks (self->_priv->mixer); m != NULL; m = m->next) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   559
+				GstMixerTrack *track = GST_MIXER_TRACK (m->data);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   560
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   561
+				if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MASTER)) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   562
+					self->_priv->mixer_tracks = g_list_append (self->_priv->mixer_tracks, g_object_ref (track));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   563
+					break;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   564
+				}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   565
+			}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   566
+		}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   567
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   568
+		if (self->_priv->mixer_tracks != NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   569
+			return TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   570
+		else {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   571
+			gst_element_set_state (GST_ELEMENT (self->_priv->mixer), GST_STATE_NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   572
+			gst_object_unref (self->_priv->mixer);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   573
+		}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   574
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   575
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   576
+	/* Go through all elements of a certain class and check whether
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   577
+	 * they implement a mixer. If so, walk through the tracks and look
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   578
+	 * for first one named "volume".
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   579
+	 *
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   580
+	 * We should probably do something intelligent if we don't find an
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   581
+	 * appropriate mixer/track.  But now we do something stupid...
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   582
+	 * everything just becomes a no-op.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   583
+	 */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   584
+	self->_priv->mixer = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   585
+	self->_priv->found_mixer = FALSE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   586
+	mixer_list = gst_audio_default_registry_mixer_filter (_acme_set_mixer,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   587
+			FALSE,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   588
+			self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   589
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   590
+	if (mixer_list == NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   591
+		return FALSE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   592
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   593
+	/* do not unref the mixer as we keep the ref for self->priv->mixer */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   594
+	g_list_free (mixer_list);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   595
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   596
+	return TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   597
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   598
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   599
+static void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   600
+acme_volume_close (AcmeVolume *self)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   601
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   602
+	self->_priv->timer_id = g_timeout_add_seconds (TIMEOUT,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   603
+			(GSourceFunc) acme_volume_close_real, self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   604
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   605
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   606
+static void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   607
+acme_volume_init (AcmeVolume *self)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   608
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   609
+	self->_priv = ACME_VOLUME_GET_PRIVATE (self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   610
+	self->_priv->gconf_client = gconf_client_get_default ();
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   611
+	self->_priv->gvc_mixer = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   612
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   613
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   614
+static void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   615
+acme_volume_class_init (AcmeVolumeClass *klass)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   616
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   617
+	G_OBJECT_CLASS (klass)->finalize = acme_volume_finalize;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   618
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   619
+	gst_init (NULL, NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   620
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   621
+	g_type_class_add_private (klass, sizeof (AcmeVolumePrivate));
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   622
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   623
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   624
+/* acme_volume_new
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   625
+ * @return A singleton instance of type AcmeVolume
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   626
+ */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   627
+AcmeVolume *
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   628
+acme_volume_new (void)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   629
+{
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   630
+	if (acme_volume_object == NULL) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   631
+		acme_volume_object = g_object_new (ACME_TYPE_VOLUME, NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   632
+		return ACME_VOLUME(acme_volume_object);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   633
+	}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   634
+	g_object_ref(acme_volume_object);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   635
+	return ACME_VOLUME(acme_volume_object);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   636
+}
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   637
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   638
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
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   639
new file mode 100644
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   640
index 0000000..c14ebc8
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   641
--- /dev/null
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   642
+++ b/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.h
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   643
@@ -0,0 +1,56 @@
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   644
+/* acme-volume.h
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   645
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   646
+   Copyright (C) 2002, 2003 Bastien Nocera
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   647
+   Copyright (C) 2004 Novell, Inc.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   648
+   Copyright (C) 2009 PERIER Romain <[email protected]>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   649
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   650
+   The Gnome Library is free software; you can redistribute it and/or
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   651
+   modify it under the terms of the GNU Library General Public License as
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   652
+   published by the Free Software Foundation; either version 2 of the
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   653
+   License, or (at your option) any later version.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   654
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   655
+   The Gnome Library is distributed in the hope that it will be useful,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   656
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   657
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   658
+   Library General Public License for more details.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   659
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   660
+   You should have received a copy of the GNU Library General Public
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   661
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   662
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   663
+   Boston, MA 02111-1307, USA.
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   664
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   665
+   Author: Bastien Nocera <[email protected]>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   666
+           Jon Trowbridge <[email protected]>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   667
+ */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   668
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   669
+#include <glib-object.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   670
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   671
+#define ACME_TYPE_VOLUME                        (acme_volume_get_type ())
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   672
+#define ACME_VOLUME(obj)		        (G_TYPE_CHECK_INSTANCE_CAST ((obj), ACME_TYPE_VOLUME, AcmeVolume))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   673
+#define ACME_VOLUME_CLASS(klass)	        (G_TYPE_CHECK_CLASS_CAST ((klass),  ACME_TYPE_VOLUME, AcmeVolumeClass))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   674
+#define ACME_IS_VOLUME(obj)	                (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ACME_TYPE_VOLUME))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   675
+#define ACME_VOLUME_GET_CLASS(obj)	        (G_TYPE_INSTANCE_GET_CLASS ((obj), ACME_TYPE_VOLUME, AcmeVolumeClass))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   676
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   677
+typedef struct AcmeVolume AcmeVolume;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   678
+typedef struct AcmeVolumeClass AcmeVolumeClass;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   679
+typedef struct AcmeVolumePrivate AcmeVolumePrivate;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   680
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   681
+struct AcmeVolume {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   682
+	GObject parent;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   683
+	AcmeVolumePrivate *_priv;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   684
+};
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   685
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   686
+struct AcmeVolumeClass {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   687
+	GObjectClass parent;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   688
+};
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   689
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   690
+GType       acme_volume_get_type      (void);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   691
+AcmeVolume *acme_volume_new           (void);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   692
+void        acme_volume_set_mute      (AcmeVolume *self, gboolean val);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   693
+void        acme_volume_mute_toggle   (AcmeVolume *self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   694
+gboolean    acme_volume_get_mute      (AcmeVolume *self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   695
+void        acme_volume_set_volume    (AcmeVolume *self, gint val);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   696
+gint        acme_volume_get_volume    (AcmeVolume *self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   697
+gint        acme_volume_get_threshold (AcmeVolume *self);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   698
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   699
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   700
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   701
--- a/plugins/media-keys/gsd-media-keys-manager.c
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   702
+++ b/plugins/media-keys/gsd-media-keys-manager.c
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   703
@@ -53,6 +53,8 @@
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   704
 #ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   705
 #include <canberra-gtk.h>
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   706
 #include "gvc-mixer-control.h"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   707
+#elif defined(HAVE_GSTREAMER)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   708
+#include "gvc-gstreamer-acme-vol.h"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   709
 #endif /* HAVE_PULSE */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   710
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   711
 #define GSD_DBUS_PATH "/org/gnome/SettingsDaemon"
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   712
@@ -78,6 +80,8 @@ struct GsdMediaKeysManagerPrivate
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   713
         /* Volume bits */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   714
         GvcMixerControl *volume;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   715
         GvcMixerStream  *stream;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   716
+#elif defined(HAVE_GSTREAMER)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   717
+        AcmeVolume      *volume;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   718
 #endif /* HAVE_PULSE */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   719
         GtkWidget       *dialog;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   720
         GConfClient     *conf_client;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   721
@@ -707,7 +711,9 @@ update_dialog (GsdMediaKeysManager *mana
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   722
                                         CA_PROP_APPLICATION_ID, "org.gnome.VolumeControl",
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   723
                                         NULL);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   724
 }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   725
+#endif /* HAVE_PULSE */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   726
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   727
+#if defined(HAVE_PULSE) || defined(HAVE_GSTREAMER)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   728
 static void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   729
 do_sound_action (GsdMediaKeysManager *manager,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   730
                  int                  type)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   731
@@ -715,9 +721,13 @@ do_sound_action (GsdMediaKeysManager *ma
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   732
         gboolean muted;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   733
         guint vol, norm_vol_step;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   734
         int vol_step;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   735
+#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   736
         gboolean sound_changed;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   737
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   738
         if (manager->priv->stream == NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   739
+#else
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   740
+        if (manager->priv->volume == NULL)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   741
+#endif
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   742
                 return;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   743
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   744
         vol_step = gconf_client_get_int (manager->priv->conf_client,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   745
@@ -727,20 +737,39 @@ do_sound_action (GsdMediaKeysManager *ma
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   746
         if (vol_step <= 0 || vol_step > 100)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   747
                 vol_step = VOLUME_STEP;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   748
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   749
+#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   750
         norm_vol_step = PA_VOLUME_NORM * vol_step / 100;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   751
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   752
         /* FIXME: this is racy */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   753
         vol = gvc_mixer_stream_get_volume (manager->priv->stream);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   754
         muted = gvc_mixer_stream_get_is_muted (manager->priv->stream);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   755
+#else
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   756
+        if (vol_step > 0) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   757
+                gint threshold = acme_volume_get_threshold (manager->priv->volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   758
+                if (vol_step < threshold)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   759
+                        vol_step = threshold;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   760
+                g_debug ("Using volume step of %d", vol_step);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   761
+        }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   762
+        vol = acme_volume_get_volume (manager->priv->volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   763
+        muted = acme_volume_get_mute (manager->priv->volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   764
+#endif
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   765
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   766
+#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   767
         sound_changed = FALSE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   768
+#endif
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   769
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   770
         switch (type) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   771
         case MUTE_KEY:
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   772
+#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   773
                 muted = !muted;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   774
                 gvc_mixer_stream_change_is_muted (manager->priv->stream, muted);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   775
                 sound_changed = TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   776
+#else
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   777
+                acme_volume_mute_toggle (manager->priv->volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   778
+#endif
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   779
                 break;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   780
         case VOLUME_DOWN_KEY:
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   781
+#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   782
                 if (!muted && (vol <= norm_vol_step)) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   783
                         muted = !muted;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   784
                         vol = 0;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   785
@@ -756,9 +785,15 @@ do_sound_action (GsdMediaKeysManager *ma
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   786
                                 sound_changed = TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   787
                         }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   788
                 }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   789
+#else
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   790
+                if (!muted && (vol <= vol_step))
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   791
+                        acme_volume_mute_toggle (manager->priv->volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   792
+                acme_volume_set_volume (manager->priv->volume, vol - vol_step);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   793
+#endif
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   794
                 break;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   795
         case VOLUME_UP_KEY:
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   796
                 if (muted) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   797
+#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   798
                         muted = !muted;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   799
                         if (vol == 0) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   800
                                vol = vol + norm_vol_step;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   801
@@ -771,7 +806,16 @@ do_sound_action (GsdMediaKeysManager *ma
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   802
                                 gvc_mixer_stream_change_is_muted (manager->priv->stream, muted);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   803
                                 sound_changed = TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   804
                         }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   805
+#else
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   806
+                        if (vol == 0) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   807
+                                /* We need to unmute otherwise vol is blocked (and muted) */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   808
+                                acme_volume_set_mute   (manager->priv->volume, FALSE);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   809
+                        }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   810
+                        acme_volume_set_volume (manager->priv->volume, vol + vol_step);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   811
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   812
+#endif
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   813
                 } else {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   814
+#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   815
                         if (vol < MAX_VOLUME) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   816
                                 if (vol + norm_vol_step >= MAX_VOLUME) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   817
                                         vol = MAX_VOLUME;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   818
@@ -783,13 +827,34 @@ do_sound_action (GsdMediaKeysManager *ma
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   819
                                         sound_changed = TRUE;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   820
                                 }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   821
                         }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   822
+#else
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   823
+                        acme_volume_set_volume (manager->priv->volume, vol + vol_step);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   824
+#endif
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   825
                 }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   826
                 break;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   827
         }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   828
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   829
+#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   830
         update_dialog (manager, vol, muted, sound_changed);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   831
+#else
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   832
+        muted = acme_volume_get_mute (manager->priv->volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   833
+        vol = acme_volume_get_volume (manager->priv->volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   834
+
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   835
+        /* FIXME: AcmeVolume should probably emit signals
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   836
+           instead of doing it like this */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   837
+        dialog_init (manager);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   838
+        gsd_media_keys_window_set_volume_muted (GSD_MEDIA_KEYS_WINDOW (manager->priv->dialog),
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   839
+                                                muted);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   840
+        gsd_media_keys_window_set_volume_level (GSD_MEDIA_KEYS_WINDOW (manager->priv->dialog),
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   841
+                                                vol);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   842
+        gsd_media_keys_window_set_action (GSD_MEDIA_KEYS_WINDOW (manager->priv->dialog),
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   843
+                                          GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   844
+        dialog_show (manager);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   845
+#endif /* HAVE_PULSE */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   846
 }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   847
+#endif /* defined(HAVE_PULSE) || defined(HAVE_GSTREAMER) */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   848
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   849
+#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   850
 static void
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   851
 update_default_sink (GsdMediaKeysManager *manager)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   852
 {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   853
@@ -951,9 +1016,9 @@ do_action (GsdMediaKeysManager *manager,
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   854
         case MUTE_KEY:
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   855
         case VOLUME_DOWN_KEY:
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   856
         case VOLUME_UP_KEY:
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   857
-#ifdef HAVE_PULSE
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   858
+#if defined(HAVE_PULSE) || defined(HAVE_GSTREAMER)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   859
                 do_sound_action (manager, type);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   860
-#endif /* HAVE_PULSE */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   861
+#endif /* HAVE_PULSE || HAVE_GSTREAMER */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   862
                 break;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   863
         case POWER_KEY:
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   864
                 do_exit_action (manager);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   865
@@ -1157,6 +1222,10 @@ gsd_media_keys_manager_start (GsdMediaKe
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   866
         gvc_mixer_control_open (manager->priv->volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   867
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   868
         gnome_settings_profile_end ("gvc_mixer_control_new");
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   869
+#elif defined(HAVE_GSTREAMER)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   870
+        gnome_settings_profile_start ("acme_volume_new");
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   871
+        manager->priv->volume = acme_volume_new ();
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   872
+        gnome_settings_profile_end ("acme_volume_new");
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   873
 #endif /* HAVE_PULSE */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   874
         g_idle_add ((GSourceFunc) start_media_keys_idle_cb, manager);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   875
 
18220
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
   876
@@ -1234,12 +1303,14 @@ gsd_media_keys_manager_stop (GsdMediaKey
17844
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   877
                 g_object_unref (priv->stream);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   878
                 priv->stream = NULL;
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   879
         }
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   880
+#endif /* HAVE_PULSE */
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   881
 
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   882
+#if defined(HAVE_PULSE) || defined(HAVE_GSTREAMER)
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   883
         if (priv->volume) {
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   884
                 g_object_unref (priv->volume);
dcae0546d241 2010-04-15 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   885
                 priv->volume = NULL;
18220
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
   886
         }
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
   887
-#endif /* HAVE_PULSE */
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
   888
+#endif /* defined(HAVE_PULSE) || defined(HAVE_GSTREAMER) */
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
   889
 
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
   890
         if (priv->dialog != NULL) {
14c4093b6689 Minor changes to the patch to make it match the patch proposed upstream.
yippi
parents: 17845
diff changeset
   891
                 gtk_widget_destroy (priv->dialog);