Author: jannis
Date: 2008-01-14 00:47:17 +0000 (Mon, 14 Jan 2008)
New Revision: 26567

Added:
   xfce4-mixer/trunk/.gitignore
Modified:
   xfce4-mixer/trunk/ChangeLog
   xfce4-mixer/trunk/TODO
   xfce4-mixer/trunk/autogen.sh
   xfce4-mixer/trunk/configure.in.in
   xfce4-mixer/trunk/xfce4-mixer/xfce-mixer-card.c
   xfce4-mixer/trunk/xfce4-mixer/xfce-mixer-card.h
   xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c
Log:
        * configure.in.in, xfce4-mixer/xfce-mixer-card.{c,h},
          xfce4-mixer/xfce-mixer.c: Add optional support for the GstMixer
          notification API. It uses GstBus and GstMixerMessages. The latter
          are only available with GStreamer >= 0.10.14. Not all work is done
          yet, but it will be worked on this week.
        * autogen.sh: Tweak autogen.sh so that it works with both, SVN and
          git-svn.


Added: xfce4-mixer/trunk/.gitignore
===================================================================
--- xfce4-mixer/trunk/.gitignore                                (rev 0)
+++ xfce4-mixer/trunk/.gitignore        2008-01-14 00:47:17 UTC (rev 26567)
@@ -0,0 +1,27 @@
+*.o
+ltmain.sh
+mkinstalldirs
+depcomp
+*.gmo
+Makefile.in.in
+.intltool-merge-cache
+configure.in
+libtool
+configure
+Makefile
+Makefile.in
+xfce4-mixer.desktop
+intltool-*
+config.*
+stamp-it
+stamp-h1
+POTFILES
+*.m4
+*.swp
+.deps
+.libs
+xfce4-mixer
+missing
+install-sh
+compile
+autom4te*

Modified: xfce4-mixer/trunk/ChangeLog
===================================================================
--- xfce4-mixer/trunk/ChangeLog 2008-01-13 19:27:18 UTC (rev 26566)
+++ xfce4-mixer/trunk/ChangeLog 2008-01-14 00:47:17 UTC (rev 26567)
@@ -1,3 +1,13 @@
+2008-01-14     Jannis Pohlmann <[EMAIL PROTECTED]>
+
+       * configure.in.in, xfce4-mixer/xfce-mixer-card.{c,h},
+         xfce4-mixer/xfce-mixer.c: Add optional support for the GstMixer
+         notification API. It uses GstBus and GstMixerMessages. The latter
+         are only available with GStreamer >= 0.10.14. Not all work is done
+         yet, but it will be worked on this week.
+       * autogen.sh: Tweak autogen.sh so that it works with both, SVN and
+         git-svn. 
+
 2008-01-13     Jannis Pohlmann <[EMAIL PROTECTED]>
 
        * xfce4-mixer-card.{c,h}: Add XfceMixerCard class as a wrapper for

Modified: xfce4-mixer/trunk/TODO
===================================================================
--- xfce4-mixer/trunk/TODO      2008-01-13 19:27:18 UTC (rev 26566)
+++ xfce4-mixer/trunk/TODO      2008-01-14 00:47:17 UTC (rev 26567)
@@ -1,5 +1,11 @@
-* Monitor for changes and update the controls according to them
+* Monitor for changes and update the controls according to them:
+   1) Add GHashTable for (track name => mixer widget) lookup
+   2) Extend xfce_mixer_bus_message() to handle all types of messages
+      by updating the corresponding mixer widgets
+
 * Write panel plugin
+
 * Write MCS plugin (or go the xfconf way)
+
 * Allow changing controls from the console, probably via something like:
   --change-control=SOUNDCARD NAME:TRACK NAME:NEW VALUE

Modified: xfce4-mixer/trunk/autogen.sh
===================================================================
--- xfce4-mixer/trunk/autogen.sh        2008-01-13 19:27:18 UTC (rev 26566)
+++ xfce4-mixer/trunk/autogen.sh        2008-01-14 00:47:17 UTC (rev 26567)
@@ -1,7 +1,7 @@
 #!/bin/sh
 #
 # $Id$
-
+#
 # vi:set ts=2 sw=2 et ai:
 #
 # Copyright (c) 2008 Jannis Pohlmann <[EMAIL PROTECTED]>
@@ -29,6 +29,20 @@
 
 # Substitute revision and linguas
 linguas=`sed -e '/^#/d' po/LINGUAS`
-sed -e "s/@LINGUAS@/${linguas}/g" < "configure.in.in" > "configure.in"
+if test -d .git/svn; then
+  revision=`LC_ALL=C git-svn find-rev HEAD`
+elif test -f .svn; then
+  revision=`LC_ALL=C svn info $0 | awk '/^Revision: / {printf "%05d\n", $2}'`
+else
+  revision=""
+fi
+sed -e "s/@LINGUAS@/${linguas}/g" \
+    -e "s/@REVISION@/${revision}/g" \
+    < "configure.in.in" > "configure.in"
 
 exec xdt-autogen $@
+
+# xdt-autogen clean does not remove all generated files
+(test x"clean" = x"$1") && {
+  rm -rf configure.in
+} || true

Modified: xfce4-mixer/trunk/configure.in.in
===================================================================
--- xfce4-mixer/trunk/configure.in.in   2008-01-13 19:27:18 UTC (rev 26566)
+++ xfce4-mixer/trunk/configure.in.in   2008-01-14 00:47:17 UTC (rev 26567)
@@ -60,6 +60,19 @@
 XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.4.0])
 XDT_CHECK_PACKAGE([LIBXFCEGUI4], [libxfcegui4-1.0], [4.4.0])
 
+dnl **************************************
+dnl *** Check for GstMixer bus support ***
+dnl **************************************
+HAVE_GST_MIXER_NOTIFICATION=no
+PKG_CHECK_MODULES(GST_MIXER_NOTIFICATION_API, 
+                  gstreamer-plugins-base-0.10 >= 0.10.14,
+                  HAVE_GST_MIXER_NOTIFICATION=yes, 
+                  HAVE_GST_MIXER_NOTIFICATION=no)
+if test "x$HAVE_GST_MIXER_NOTIFICATION" = "xyes"; then
+  AC_DEFINE(HAVE_GST_MIXER_NOTIFICATION, 1, 
+            [Have GStreamer mixer notification API])
+fi
+
 dnl ***********************************
 dnl *** Check for debugging support ***
 dnl ***********************************

Modified: xfce4-mixer/trunk/xfce4-mixer/xfce-mixer-card.c
===================================================================
--- xfce4-mixer/trunk/xfce4-mixer/xfce-mixer-card.c     2008-01-13 19:27:18 UTC 
(rev 26566)
+++ xfce4-mixer/trunk/xfce4-mixer/xfce-mixer-card.c     2008-01-14 00:47:17 UTC 
(rev 26567)
@@ -55,6 +55,10 @@
 
   GstElement *element;
 
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+  GstBus     *bus;
+#endif
+
   gchar      *display_name;
   gchar      *name;
 };
@@ -112,6 +116,10 @@
 xfce_mixer_card_init (XfceMixerCard *card)
 {
   card->name = NULL;
+
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+  card->bus = NULL;
+#endif
 }
 
 
@@ -124,6 +132,11 @@
   gst_element_set_state (card->element, GST_STATE_NULL);
   gst_object_unref (card->element);
 
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+  if (G_LIKELY (card->bus != NULL))
+    gst_object_unref (card->bus);
+#endif
+
   g_free (card->display_name);
   g_free (card->name);
 
@@ -305,3 +318,36 @@
 
   gst_mixer_set_option (GST_MIXER (card->element), GST_MIXER_OPTIONS (track), 
option);
 }
+
+
+
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+void
+xfce_mixer_card_connect (XfceMixerCard *card,
+                         GCallback      callback_func,
+                         gpointer       user_data)
+{
+  g_return_if_fail (IS_XFCE_MIXER_CARD (card));
+
+  if (G_UNLIKELY (card->bus == NULL))
+    {
+      card->bus = gst_bus_new ();
+      gst_bus_add_signal_watch (card->bus);
+      gst_element_set_bus (card->element, card->bus);
+    }
+
+  g_signal_connect (G_OBJECT (card->bus), "message::element", callback_func, 
user_data);
+}
+
+
+
+gboolean
+xfce_mixer_card_get_message_owner (XfceMixerCard *card,
+                                   GstMessage    *message)
+{
+  g_return_val_if_fail (IS_XFCE_MIXER_CARD (card), FALSE);
+  g_return_val_if_fail (GST_IS_MESSAGE (message), FALSE);
+
+  return GST_MESSAGE_SRC (message) == GST_OBJECT (card->element);
+}
+#endif

Modified: xfce4-mixer/trunk/xfce4-mixer/xfce-mixer-card.h
===================================================================
--- xfce4-mixer/trunk/xfce4-mixer/xfce-mixer-card.h     2008-01-13 19:27:18 UTC 
(rev 26566)
+++ xfce4-mixer/trunk/xfce4-mixer/xfce-mixer-card.h     2008-01-14 00:47:17 UTC 
(rev 26567)
@@ -62,6 +62,13 @@
 void           xfce_mixer_card_set_track_option     (XfceMixerCard *card,
                                                      GstMixerTrack *track,
                                                      gchar         *option);
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+void           xfce_mixer_card_connect              (XfceMixerCard *card,
+                                                     GCallback      
callback_func,
+                                                     gpointer       user_data);
+gboolean       xfce_mixer_card_get_message_owner    (XfceMixerCard *card,
+                                                     GstMessage    *message);
+#endif
 
 
 G_END_DECLS;

Modified: xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c
===================================================================
--- xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c  2008-01-13 19:27:18 UTC (rev 
26566)
+++ xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c  2008-01-14 00:47:17 UTC (rev 
26567)
@@ -43,6 +43,11 @@
 static void       xfce_mixer_dispose               (GObject        *object);
 static void       xfce_mixer_finalize              (GObject        *object);
 static void       xfce_mixer_create_contents       (XfceMixer      *mixer);
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+static gboolean   xfce_mixer_bus_message           (GstBus         *bus,
+                                                    GstMessage     *message,
+                                                    XfceMixer      *mixer);
+#endif
 
 
 
@@ -173,6 +178,10 @@
 
   xfce_mixer_card_set_ready (mixer->card);
 
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+  xfce_mixer_card_connect (mixer->card, G_CALLBACK (xfce_mixer_bus_message), 
mixer);
+#endif
+
   /* Create widgets for all four tabs */
   for (i = 0; i < 4; ++i)
     {
@@ -297,3 +306,48 @@
       gtk_notebook_append_page (GTK_NOTEBOOK (mixer), label2, label1);
     }
 }
+
+
+
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+static gboolean
+xfce_mixer_bus_message (GstBus     *bus,
+                        GstMessage *message,
+                        XfceMixer  *mixer)
+{
+  GstMixerMessageType type;
+  GstMixerOptions    *options = NULL;
+  GstMixerTrack      *track = NULL;
+  gboolean            muted;
+  gboolean            record;
+  const gchar        *option;
+
+  if (G_UNLIKELY (!xfce_mixer_card_get_message_owner (mixer->card, message)))
+    return TRUE;
+
+  g_debug ("Message from card received: %s", GST_MESSAGE_TYPE_NAME (message));
+
+  type = gst_mixer_message_get_type (message);
+
+  if (type == GST_MIXER_MESSAGE_MUTE_TOGGLED)
+    {
+      gst_mixer_message_parse_mute_toggled (message, &track, &muted);
+      g_debug ("Track '%s' was %s", track->label, muted ? "muted" : "unmuted");
+    }
+  else if (type == GST_MIXER_MESSAGE_RECORD_TOGGLED)
+    {
+      gst_mixer_message_parse_record_toggled (message, &track, &record);
+      g_debug ("Recording on track '%s' was %s", track->label, record ? 
"turned on" : "turned off");
+    }
+  else if (type == GST_MIXER_MESSAGE_VOLUME_CHANGED)
+    {
+    }
+  else if (type == GST_MIXER_MESSAGE_OPTION_CHANGED)
+    {
+      gst_mixer_message_parse_option_changed (message, &options, &option);
+      g_debug ("Option '%s' was set to '%s'", GST_MIXER_TRACK 
(options)->label, option);
+    }
+
+  return TRUE;
+}
+#endif

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to