Author: jannis
Date: 2008-06-21 12:57:24 +0000 (Sat, 21 Jun 2008)
New Revision: 27106

Modified:
   xfce4-mixer/trunk/ChangeLog
   xfce4-mixer/trunk/TODO
   xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c
   xfce4-mixer/trunk/panel-plugin/xfce-volume-button.c
   xfce4-mixer/trunk/panel-plugin/xfce-volume-button.h
Log:
        * panel-plugin/xfce-volume-button.{c,h}: Add "mute-toggled"
          signal for when the middle mouse button is clicked. Add
          xfce_volume_button_set_muted() method for manually changing
          the mute state of the button (does not affect the actual sound
          settings).
        * panel-plugin/xfce-mixer-plugin.c: Handle
          GST_MESSAGE_MUTE_TOGGLED messages by setting the muted state
          of the plugin button.


Modified: xfce4-mixer/trunk/ChangeLog
===================================================================
--- xfce4-mixer/trunk/ChangeLog 2008-06-21 12:38:04 UTC (rev 27105)
+++ xfce4-mixer/trunk/ChangeLog 2008-06-21 12:57:24 UTC (rev 27106)
@@ -1,5 +1,16 @@
 2008-06-21     Jannis Pohlmann <[EMAIL PROTECTED]>
 
+       * panel-plugin/xfce-volume-button.{c,h}: Add "mute-toggled" 
+         signal for when the middle mouse button is clicked. Add 
+         xfce_volume_button_set_muted() method for manually changing
+         the mute state of the button (does not affect the actual sound
+         settings).
+       * panel-plugin/xfce-mixer-plugin.c: Handle 
+         GST_MESSAGE_MUTE_TOGGLED messages by setting the muted state
+         of the plugin button.
+         
+2008-06-21     Jannis Pohlmann <[EMAIL PROTECTED]>
+
        * panel-plugin/xfce-mixer-plugin.c: Add support for
          xfce_mixer_card_connect() so that the volume button is updated
          whenever the volume of the current mixer track is changed by

Modified: xfce4-mixer/trunk/TODO
===================================================================
--- xfce4-mixer/trunk/TODO      2008-06-21 12:38:04 UTC (rev 27105)
+++ xfce4-mixer/trunk/TODO      2008-06-21 12:57:24 UTC (rev 27106)
@@ -3,8 +3,5 @@
    2) Extend xfce_mixer_bus_message() to handle all types of messages
       by updating the corresponding mixer widgets
 
-* Write panel plugin
-   1) Monitor GStreamer for changes
-
 * Allow changing controls from the console, probably via something like:
   --change-control=SOUNDCARD NAME:TRACK NAME:NEW VALUE

Modified: xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c
===================================================================
--- xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c  2008-06-21 12:38:04 UTC 
(rev 27105)
+++ xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c  2008-06-21 12:57:24 UTC 
(rev 27106)
@@ -69,6 +69,8 @@
                                                           gint              
size);
 static void             xfce_mixer_plugin_volume_changed (XfceMixerPlugin  
*mixer_plugin,
                                                           gdouble           
volume);
+static void             xfce_mixer_plugin_mute_toggled   (XfceMixerPlugin  
*mixer_plugin,
+                                                          gboolean          
mute);
 static void             xfce_mixer_plugin_configure      (XfceMixerPlugin  
*mixer_plugin);
 static void             xfce_mixer_plugin_clicked        (XfceMixerPlugin  
*mixer_plugin);
 static void             xfce_mixer_plugin_read_config    (XfceMixerPlugin  
*mixer_plugin);
@@ -113,6 +115,7 @@
   mixer_plugin->button = xfce_volume_button_new ();
   xfce_panel_plugin_add_action_widget (plugin, mixer_plugin->button);
   g_signal_connect_swapped (G_OBJECT (mixer_plugin->button), "volume-changed", 
G_CALLBACK (xfce_mixer_plugin_volume_changed), mixer_plugin);
+  g_signal_connect_swapped (G_OBJECT (mixer_plugin->button), "mute-toggled", 
G_CALLBACK (xfce_mixer_plugin_mute_toggled), mixer_plugin);
   g_signal_connect_swapped (G_OBJECT (mixer_plugin->button), "clicked", 
G_CALLBACK (xfce_mixer_plugin_clicked), mixer_plugin);
   gtk_container_add (GTK_CONTAINER (mixer_plugin->hvbox), 
mixer_plugin->button);
   gtk_widget_show (mixer_plugin->button);
@@ -224,6 +227,19 @@
 
 
 static void
+xfce_mixer_plugin_mute_toggled (XfceMixerPlugin *mixer_plugin,
+                                gboolean         mute)
+{
+  g_return_if_fail (mixer_plugin != NULL);
+  g_return_if_fail (IS_XFCE_MIXER_CARD (mixer_plugin->card));
+  g_return_if_fail (GST_IS_MIXER_TRACK (mixer_plugin->track));
+
+  xfce_mixer_card_set_track_muted (mixer_plugin->card, mixer_plugin->track, 
mute);
+}
+
+
+
+static void
 xfce_mixer_plugin_clicked (XfceMixerPlugin *mixer_plugin)
 {
   g_return_if_fail (mixer_plugin != NULL);
@@ -411,21 +427,30 @@
   gdouble             volume;
   gint               *volumes;
   gint                num_channels;
+  gboolean            mute;
 
   if (G_UNLIKELY (!xfce_mixer_card_get_message_owner (mixer_plugin->card, 
message)))
     return TRUE;
 
   g_debug ("Message from card received: %s", GST_MESSAGE_TYPE_NAME (message));
 
-  if (G_LIKELY (gst_mixer_message_get_type (message) == 
GST_MIXER_MESSAGE_VOLUME_CHANGED))
+  switch (gst_mixer_message_get_type (message))
     {
-      gst_mixer_message_parse_volume_changed (message, &track, &volumes, 
&num_channels);
+      case GST_MIXER_MESSAGE_VOLUME_CHANGED:
+        gst_mixer_message_parse_volume_changed (message, &track, &volumes, 
&num_channels);
 
-      if (G_UNLIKELY (g_utf8_collate (track->label, 
mixer_plugin->track->label) == 0))
-        {
-          volume = ((gdouble) volumes[0]) / mixer_plugin->track->max_volume;
-          xfce_volume_button_set_volume (XFCE_VOLUME_BUTTON 
(mixer_plugin->button), volume);
-        }
+        if (G_UNLIKELY (g_utf8_collate (track->label, 
mixer_plugin->track->label) == 0))
+          {
+            volume = ((gdouble) volumes[0]) / mixer_plugin->track->max_volume;
+            xfce_volume_button_set_volume (XFCE_VOLUME_BUTTON 
(mixer_plugin->button), volume);
+          }
+        break;
+      case GST_MIXER_MESSAGE_MUTE_TOGGLED:
+        gst_mixer_message_parse_mute_toggled (message, &track, &mute);
+
+        if (G_UNLIKELY (g_utf8_collate (track->label, 
mixer_plugin->track->label) == 0))
+          xfce_volume_button_set_muted (XFCE_VOLUME_BUTTON 
(mixer_plugin->button), mute);
+        break;
     }
 }
 #endif

Modified: xfce4-mixer/trunk/panel-plugin/xfce-volume-button.c
===================================================================
--- xfce4-mixer/trunk/panel-plugin/xfce-volume-button.c 2008-06-21 12:38:04 UTC 
(rev 27105)
+++ xfce4-mixer/trunk/panel-plugin/xfce-volume-button.c 2008-06-21 12:57:24 UTC 
(rev 27106)
@@ -36,6 +36,7 @@
 enum
 {
   VOLUME_CHANGED,
+  MUTE_TOGGLED,
   LAST_SIGNAL,
 };
 
@@ -74,6 +75,8 @@
                                                      XfceVolumeButton      
*button);
 static void       xfce_volume_button_volume_changed (XfceVolumeButton      
*button,
                                                      gdouble                
volume);
+static void       xfce_volume_button_mute_toggled   (XfceVolumeButton      
*button,
+                                                     gboolean               
mute);
 
 
 
@@ -84,6 +87,9 @@
   /* Signals */
   void (*volume_changed) (XfceVolumeButton *button,
                           gdouble           volume);
+
+  void (*mute_toggled)   (XfceVolumeButton *button,
+                          gboolean          mute);
 };
 
 struct _XfceVolumeButton
@@ -94,9 +100,9 @@
 
   GtkObject *adjustment;
 
-  gdouble    previous_value;
+  gint       icon_size;
 
-  gint       icon_size;
+  gboolean   is_muted;
 };
 
 
@@ -147,6 +153,7 @@
   gobject_class->finalize = xfce_volume_button_finalize;
 
   klass->volume_changed = xfce_volume_button_volume_changed;
+  klass->mute_toggled = xfce_volume_button_mute_toggled;
 
   button_signals[VOLUME_CHANGED] = g_signal_new ("volume-changed",
                                                  G_TYPE_FROM_CLASS (klass),
@@ -158,6 +165,17 @@
                                                  G_TYPE_NONE, 
                                                  1, 
                                                  G_TYPE_DOUBLE);
+
+  button_signals[MUTE_TOGGLED] = g_signal_new ("mute-toggled",
+                                               G_TYPE_FROM_CLASS (klass),
+                                               G_SIGNAL_RUN_LAST | 
G_SIGNAL_ACTION,
+                                               G_STRUCT_OFFSET 
(XfceVolumeButtonClass, mute_toggled),
+                                               NULL, 
+                                               NULL,
+                                               
g_cclosure_marshal_VOID__BOOLEAN,
+                                               G_TYPE_NONE, 
+                                               1, 
+                                               G_TYPE_BOOLEAN);
 }
 
 
@@ -165,6 +183,8 @@
 static void
 xfce_volume_button_init (XfceVolumeButton *button)
 {
+  button->is_muted = FALSE;
+
   button->adjustment = gtk_adjustment_new (0.0, 0.0, 1.0, 0.05, 0.05, 0.2);
   button->image = xfce_scaled_image_new ();
 
@@ -252,8 +272,6 @@
         break;
     }
 
-  button->previous_value = value;
-
   xfce_volume_button_update (button);
 
   g_signal_emit_by_name (button, "volume-changed", gtk_adjustment_get_value 
(GTK_ADJUSTMENT (button->adjustment)));
@@ -266,35 +284,21 @@
                                    GdkEventButton   *event,
                                    XfceVolumeButton *button)
 {
-  gboolean handled = FALSE;
-  gdouble value;
-  gdouble min_value;
-
+  gboolean mute;
   g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button));
 
-  g_object_get (G_OBJECT (button->adjustment), "value", &value, "lower", 
&min_value, NULL);
-
   if (event->button == 2)
     {
-      if (gtk_adjustment_get_value (GTK_ADJUSTMENT (button->adjustment)) == 
min_value)
-        {
-          gtk_adjustment_set_value (GTK_ADJUSTMENT (button->adjustment), 
button->previous_value);
-          button->previous_value = value;
-        }
-      else
-        {
-          gtk_adjustment_set_value (GTK_ADJUSTMENT (button->adjustment), 
min_value);
-          button->previous_value = value;
-        }
+      mute = !button->is_muted;
 
-      handled = TRUE;
-    }
+      xfce_volume_button_set_muted (button, mute);
 
-  xfce_volume_button_update (button);
+      g_signal_emit_by_name (button, "mute-toggled", mute);
 
-  g_signal_emit_by_name (button, "volume-changed", gtk_adjustment_get_value 
(GTK_ADJUSTMENT (button->adjustment)));
+      return TRUE;
+    }
 
-  return handled;
+  return FALSE;
 }
 
 
@@ -382,7 +386,7 @@
 
   range = (upper - lower) / (G_N_ELEMENTS (icons) - 2);
 
-  if (value == 0)
+  if (G_UNLIKELY (value == 0 || button->is_muted))
     pixbuf = xfce_themed_icon_load (icons[0], button->icon_size);
   else
     {
@@ -411,6 +415,17 @@
 
 
 
+void
+xfce_volume_button_set_muted (XfceVolumeButton *button,
+                              gboolean          muted)
+{
+  g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button));
+  button->is_muted = muted;
+  xfce_volume_button_update (button);
+}
+
+
+
 void 
 xfce_volume_button_set_volume (XfceVolumeButton *button,
                                gdouble           volume)
@@ -429,3 +444,11 @@
   g_return_if_fail (size >= 0);
   button->icon_size = size;
 }
+
+
+
+static void
+xfce_volume_button_mute_toggled (XfceVolumeButton *button,
+                                 gboolean          mute)
+{
+}

Modified: xfce4-mixer/trunk/panel-plugin/xfce-volume-button.h
===================================================================
--- xfce4-mixer/trunk/panel-plugin/xfce-volume-button.h 2008-06-21 12:38:04 UTC 
(rev 27105)
+++ xfce4-mixer/trunk/panel-plugin/xfce-volume-button.h 2008-06-21 12:57:24 UTC 
(rev 27106)
@@ -39,6 +39,8 @@
 
 GtkWidget *xfce_volume_button_new           (void);
 
+void       xfce_volume_button_set_muted     (XfceVolumeButton *button,
+                                             gboolean          muted);
 void       xfce_volume_button_set_volume    (XfceVolumeButton *button,
                                              gdouble           volume);
 void       xfce_volume_button_update        (XfceVolumeButton *button);

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

Reply via email to