Author: jannis Date: 2008-06-22 14:14:39 +0000 (Sun, 22 Jun 2008) New Revision: 27135
Modified: xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c xfce4-mixer/trunk/panel-plugin/xfce-volume-button.c Log: Add some debug messages for Jens. Modified: xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c =================================================================== --- xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c 2008-06-22 13:35:51 UTC (rev 27134) +++ xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c 2008-06-22 14:14:39 UTC (rev 27135) @@ -48,17 +48,26 @@ { XfcePanelPlugin *plugin; + /* Currently used sound card name */ gchar *card_name; + + /* Currently used mixer track name */ gchar *track_name; + /* Tooltips structure */ GtkTooltips *tooltips; + /* Sound card being used */ XfceMixerCard *card; + + /* Mixer track being used */ GstMixerTrack *track; + /* Widgets */ GtkWidget *hvbox; GtkWidget *button; + /* Flag for ignoring messages from the GstBus */ gboolean ignore_bus_messages; }; @@ -108,26 +117,32 @@ /* Store pointer to the panel plugin */ mixer_plugin->plugin = plugin; + /* Initialize some of the plugin variables */ mixer_plugin->card = NULL; mixer_plugin->track = NULL; mixer_plugin->ignore_bus_messages = FALSE; + /* Allocate a tooltips structure */ mixer_plugin->tooltips = gtk_tooltips_new (); gtk_tooltips_set_delay (mixer_plugin->tooltips, 10); + /* Create container for the plugin */ mixer_plugin->hvbox = GTK_WIDGET (xfce_hvbox_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0)); xfce_panel_plugin_add_action_widget (plugin, mixer_plugin->hvbox); gtk_container_add (GTK_CONTAINER (plugin), mixer_plugin->hvbox); gtk_widget_show (mixer_plugin->hvbox); + /* Create volume button for the plugin */ 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); + /* Let the volume button receive mouse events */ + xfce_panel_plugin_add_action_widget (plugin, mixer_plugin->button); + return mixer_plugin; } @@ -137,9 +152,11 @@ xfce_mixer_plugin_free (XfcePanelPlugin *plugin, XfceMixerPlugin *mixer_plugin) { + /* Free card and track names */ g_free (mixer_plugin->card_name); g_free (mixer_plugin->track_name); + /* Free memory of the mixer plugin */ panel_slice_free (XfceMixerPlugin, mixer_plugin); } @@ -153,6 +170,7 @@ /* Set up translation domain */ xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); + /* Initialize the thread system */ if (!g_thread_supported ()) g_thread_init (NULL); @@ -232,6 +250,10 @@ volume_range = mixer_plugin->track->max_volume - mixer_plugin->track->min_volume; new_volume = mixer_plugin->track->min_volume + (volume * volume_range); + g_message ("Volume changed for %s (%s):", xfce_mixer_card_get_display_name (mixer_plugin->card), GST_MIXER_TRACK (mixer_plugin->track)->label); + g_message (" min_volume = %i, max_volume = %i, volume_range = %i, new_volume = %i", + mixer_plugin->track->min_volume, mixer_plugin->track->max_volume, volume_range, new_volume); + for (i = 0; i < mixer_plugin->track->num_channels; ++i) volumes[i] = new_volume; @@ -459,13 +481,15 @@ 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)); + g_message ("Message from card received: %s", GST_MESSAGE_TYPE_NAME (message)); switch (gst_mixer_message_get_type (message)) { case GST_MIXER_MESSAGE_VOLUME_CHANGED: gst_mixer_message_parse_volume_changed (message, &track, &volumes, &num_channels); + g_message (" volume of %s changed to: %i", track->label, volumes[0]); + if (G_UNLIKELY (g_utf8_collate (track->label, mixer_plugin->track->label) == 0)) { volume = ((gdouble) volumes[0]) / mixer_plugin->track->max_volume; Modified: xfce4-mixer/trunk/panel-plugin/xfce-volume-button.c =================================================================== --- xfce4-mixer/trunk/panel-plugin/xfce-volume-button.c 2008-06-22 13:35:51 UTC (rev 27134) +++ xfce4-mixer/trunk/panel-plugin/xfce-volume-button.c 2008-06-22 14:14:39 UTC (rev 27135) @@ -29,6 +29,8 @@ #include <libxfcegui4/libxfcegui4.h> +#include "libxfce4mixer/xfce-mixer-stock.h" + #include "xfce-volume-button.h" @@ -43,15 +45,19 @@ +/* Signals */ static guint button_signals[LAST_SIGNAL]; + + +/* Icons for different volume levels */ static const char *icons[] = { - "audio-volume-00", - "audio-volume-01", - "audio-volume-02", - "audio-volume-03", - "audio-volume-04", - "audio-volume-05", + AUDIO_VOLUME_00, + AUDIO_VOLUME_01, + AUDIO_VOLUME_02, + AUDIO_VOLUME_03, + AUDIO_VOLUME_04, + AUDIO_VOLUME_05, NULL }; @@ -90,7 +96,6 @@ /* Signals */ void (*volume_changed) (XfceVolumeButton *button, gdouble volume); - void (*mute_toggled) (XfceVolumeButton *button, gboolean mute); }; @@ -99,14 +104,19 @@ { GtkButton __parent__; + /* Image widget for the volume icon */ GtkWidget *image; + /* Adjustment for the volume range and current value */ GtkObject *adjustment; + /* Icon size currently used */ gint icon_size; + /* Array of preloaded icons */ GdkPixbuf **pixbufs; + /* Mute state of the button */ gboolean is_muted; }; @@ -188,20 +198,26 @@ static void xfce_volume_button_init (XfceVolumeButton *button) { + /* By default we expect the button not to be muted */ button->is_muted = FALSE; + /* Allocate array for preloaded icons */ button->pixbufs = g_new0 (GdkPixbuf*, G_N_ELEMENTS (icons)-1); + /* Create adjustment for the button (from 0.0 to 1.0 in 5% steps) */ button->adjustment = gtk_adjustment_new (0.0, 0.0, 1.0, 0.05, 0.05, 0.2); + + /* Create a new scaled image for the button icon */ button->image = xfce_scaled_image_new (); - gtk_container_add (GTK_CONTAINER (button), button->image); gtk_widget_show (button->image); + /* Make the button look flat and make it never grab the focus */ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE); gtk_button_set_focus_on_click (GTK_BUTTON (button), FALSE); GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (button), GTK_CAN_DEFAULT|GTK_CAN_FOCUS); + /* Connect to button signals */ #if 0 /* UNSED FOR NOW DUE TO TOO MUCH PROBLEMS WITH KEYBOARD FOCUS GRABBING */ g_signal_connect (G_OBJECT (button), "key-press-event", G_CALLBACK (xfce_volume_button_key_pressed), button); @@ -209,6 +225,7 @@ g_signal_connect (G_OBJECT (button), "button-press-event", G_CALLBACK (xfce_volume_button_button_pressed), button); g_signal_connect (G_OBJECT (button), "scroll-event", G_CALLBACK (xfce_volume_button_scrolled), button); + /* Update the state of the button */ xfce_volume_button_update (button); } @@ -229,10 +246,10 @@ XfceVolumeButton *button = XFCE_VOLUME_BUTTON (object); + /* Free pre-allocated icon pixbufs */ for (i = 0; i < G_N_ELEMENTS (icons)-1; ++i) if (GDK_IS_PIXBUF (button->pixbufs[i])) g_object_unref (G_OBJECT (button->pixbufs[i])); - g_free (button->pixbufs); (*G_OBJECT_CLASS (xfce_volume_button_parent_class)->finalize) (object); @@ -314,19 +331,26 @@ XfceVolumeButton *button) { gboolean mute; + g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button)); + /* Check if the middle mouse button was pressed */ if (event->button == 2) { + /* Determine the new mute state by negating the current state */ mute = !button->is_muted; + /* Toggle the button's mute state */ xfce_volume_button_set_muted (button, mute); + /* Notify listeners of the mute change */ g_signal_emit_by_name (button, "mute-toggled", mute); + /* Middle mouse button was handled, do not propagate the event any further */ return TRUE; } + /* Left and right mouse buttons are ignored, someone else handle it */ return FALSE; } @@ -343,24 +367,31 @@ g_return_if_fail (GTK_IS_WIDGET (widget)); g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button)); + /* Get current adjustment value and the step increment size */ g_object_get (G_OBJECT (button->adjustment), "value", &value, "step-increment", &step_increment, NULL); + /* Distinguish between scroll directions */ switch (event->direction) { case GDK_SCROLL_UP: case GDK_SCROLL_RIGHT: + /* Increase one step when scrolling up/right */ gtk_adjustment_set_value (GTK_ADJUSTMENT (button->adjustment), value + step_increment); break; case GDK_SCROLL_DOWN: case GDK_SCROLL_LEFT: + /* Decrease one step when scrolling down/left */ gtk_adjustment_set_value (GTK_ADJUSTMENT (button->adjustment), value - step_increment); break; } + /* Update the state of the button */ xfce_volume_button_update (button); + /* Notify listeners of the new volume */ g_signal_emit_by_name (button, "volume-changed", gtk_adjustment_get_value (GTK_ADJUSTMENT (button->adjustment))); + /* The scroll event has been handled, stop other handlers from being invoked */ return TRUE; } @@ -378,14 +409,21 @@ g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button)); + /* Get upper, lower bounds and current value of the adjustment */ g_object_get (G_OBJECT (button->adjustment), "upper", &upper, "lower", &lower, "value", &value, NULL); + /* Determine the difference between upper and lower bound (= volume range) */ range = (upper - lower) / (G_N_ELEMENTS (icons) - 2); - if (G_UNLIKELY (value == 0 || button->is_muted)) - pixbuf = button->pixbufs[0]; + if (G_UNLIKELY (value == lower || button->is_muted)) + { + /* By definition, use the first icon if the volume is set to the minimum value + * or if the button is muted */ + pixbuf = button->pixbufs[0]; + } else { + /* Find the correct icon for the current volume */ for (i = 1; i < G_N_ELEMENTS (icons) - 1; ++i) if (value <= range * i) { @@ -394,6 +432,7 @@ } } + /* Update the button icon */ if (G_LIKELY (pixbuf != NULL)) xfce_scaled_image_set_from_pixbuf (XFCE_SCALED_IMAGE (button->image), pixbuf); } @@ -404,6 +443,7 @@ xfce_volume_button_volume_changed (XfceVolumeButton *button, gdouble volume) { + /* Do nothing */ } @@ -413,7 +453,11 @@ gboolean muted) { g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button)); + + /* Change mute value */ button->is_muted = muted; + + /* Update the state of the button */ xfce_volume_button_update (button); } @@ -424,7 +468,11 @@ gdouble volume) { g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button)); + + /* Set the value of the adjustment */ gtk_adjustment_set_value (GTK_ADJUSTMENT (button->adjustment), volume); + + /* Update the state of the button */ xfce_volume_button_update (button); } @@ -438,8 +486,10 @@ g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button)); g_return_if_fail (size >= 0); + /* Remember the icon size */ button->icon_size = size; + /* Pre-load all icons */ for (i = 0; i < G_N_ELEMENTS (icons)-1; ++i) { if (GDK_IS_PIXBUF (button->pixbufs[i])) @@ -455,4 +505,5 @@ xfce_volume_button_mute_toggled (XfceVolumeButton *button, gboolean mute) { + /* Do nothing */ } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits