diff pidgin/gtkmedia.c @ 26490:ee0282fe3673

Move volume levels for media to the media window.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Fri, 03 Apr 2009 02:25:30 +0000
parents 70ab418e9d4f
children 7f252e261870
line wrap: on
line diff
--- a/pidgin/gtkmedia.c	Fri Apr 03 00:26:41 2009 +0000
+++ b/pidgin/gtkmedia.c	Fri Apr 03 02:25:30 2009 +0000
@@ -583,6 +583,24 @@
 }
 
 static void
+pidgin_media_input_volume_changed(GtkRange *range, PurpleMedia *media)
+{
+	double val = (double)gtk_range_get_value(GTK_RANGE(range));
+	purple_prefs_set_int("/purple/media/audio/volume/input", val);
+	val /= 10.0;
+	purple_media_set_input_volume(media, NULL, val);
+}
+
+static void
+pidgin_media_output_volume_changed(GtkRange *range, PurpleMedia *media)
+{
+	double val = (double)gtk_range_get_value(GTK_RANGE(range));
+	purple_prefs_set_int("/purple/media/audio/volume/output", val);
+	val /= 10.0;
+	purple_media_set_output_volume(media, NULL, NULL, val);
+}
+
+static void
 pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia, const gchar *sid)
 {
 	PurpleMediaManager *manager = purple_media_get_manager(media);
@@ -695,6 +713,19 @@
 	}
 
 	if (type & PURPLE_MEDIA_RECV_AUDIO) {
+		GtkWidget *volume = gtk_hscale_new_with_range(0.0, 100.0, 5.0);
+		gtk_range_set_increments(GTK_RANGE(volume), 5.0, 25.0);
+		gtk_range_set_value(GTK_RANGE(volume),
+				purple_prefs_get_int(
+				"/purple/media/audio/volume/output"));
+		gtk_scale_set_draw_value(GTK_SCALE(volume), FALSE);
+		g_signal_connect (G_OBJECT(volume), "value-changed",
+				G_CALLBACK(pidgin_media_output_volume_changed),
+				media);
+		gtk_box_pack_end(GTK_BOX(recv_widget),
+				volume, FALSE, FALSE, 0);
+		gtk_widget_show(volume);
+
 		gtkmedia->priv->recv_progress = gtk_progress_bar_new();
 		gtk_widget_set_size_request(gtkmedia->priv->recv_progress, 320, 10);
 		gtk_box_pack_end(GTK_BOX(recv_widget),
@@ -702,7 +733,22 @@
 		gtk_widget_show(gtkmedia->priv->recv_progress);
 	}
 	if (type & PURPLE_MEDIA_SEND_AUDIO) {
-		GstElement *media_src = purple_media_get_src(media, sid);
+		GstElement *media_src;
+		GtkWidget *volume = gtk_hscale_new_with_range(0.0, 100.0, 5.0);
+		gtk_range_set_increments(GTK_RANGE(volume), 5.0, 25.0);
+		gtk_range_set_value(GTK_RANGE(volume),
+				purple_prefs_get_int(
+				"/purple/media/audio/volume/input"));
+				gtk_scale_set_draw_value(volume, FALSE);
+		gtk_scale_set_draw_value(GTK_SCALE(volume), FALSE);
+		g_signal_connect (G_OBJECT(volume), "value-changed",
+				G_CALLBACK (pidgin_media_input_volume_changed),
+				media);
+		gtk_box_pack_end(GTK_BOX(send_widget),
+				volume, FALSE, FALSE, 0);
+		gtk_widget_show(volume);
+
+		media_src = purple_media_get_src(media, sid);
 		gtkmedia->priv->send_level = gst_bin_get_by_name(
 				GST_BIN(media_src), "sendlevel");