pidgin/gtkprefs.c

changeset 39780
90027b926a3e
parent 39779
a01d813df763
child 39781
3927ccd7487c
--- a/pidgin/gtkprefs.c	Wed Aug 07 02:37:46 2019 -0400
+++ b/pidgin/gtkprefs.c	Wed Aug 07 19:53:14 2019 -0400
@@ -264,6 +264,7 @@
 			GtkWidget *level;
 			GtkWidget *threshold;
 			GtkWidget *volume;
+			GtkWidget *test;
 			GstElement *pipeline;
 		} voice;
 
@@ -271,6 +272,7 @@
 			PidginPrefCombo input;
 			PidginPrefCombo output;
 			GtkWidget *drawing_area;
+			GtkWidget *test;
 			GstElement *pipeline;
 		} video;
 	} vv;
@@ -2911,11 +2913,18 @@
 }
 
 static void
-vv_test_switch_page_cb(G_GNUC_UNUSED GtkStack *stack,
-                       G_GNUC_UNUSED GParamSpec *pspec, gpointer data)
+vv_test_switch_page_cb(GtkStack *stack, G_GNUC_UNUSED GParamSpec *pspec,
+                       gpointer data)
 {
-	GtkWidget *test = data;
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(test), FALSE);
+	PidginPrefsWindow *win = data;
+
+	if (!g_str_equal(gtk_stack_get_visible_child_name(stack), "vv")) {
+		/* Disable any running test pipelines. */
+		gtk_toggle_button_set_active(
+		        GTK_TOGGLE_BUTTON(win->vv.voice.test), FALSE);
+		gtk_toggle_button_set_active(
+		        GTK_TOGGLE_BUTTON(win->vv.video.test), FALSE);
+	}
 }
 
 static GstElement *
@@ -3057,8 +3066,6 @@
 		                 G_CALLBACK(on_volume_change_cb), win);
 		g_signal_connect(test, "destroy",
 		                 G_CALLBACK(voice_test_destroy_cb), win);
-		g_signal_connect(win->stack, "notify::visible-child",
-		                 G_CALLBACK(vv_test_switch_page_cb), test);
 	} else {
 		gtk_progress_bar_set_fraction(
 		        GTK_PROGRESS_BAR(win->vv.voice.level), 0.0);
@@ -3069,9 +3076,6 @@
 		g_object_disconnect(test, "any-signal::destroy",
 		                    G_CALLBACK(voice_test_destroy_cb), win,
 		                    NULL);
-		g_object_disconnect(win->stack, "any-signal::notify",
-		                    G_CALLBACK(vv_test_switch_page_cb), test,
-		                    NULL);
 		voice_test_destroy_cb(NULL, win);
 	}
 }
@@ -3128,9 +3132,10 @@
 	win->vv.voice.level =
 	        GTK_WIDGET(gtk_builder_get_object(builder, "vv.voice.level"));
 
-	test = gtk_builder_get_object(builder, "vv.voice.test_button");
+	test = gtk_builder_get_object(builder, "vv.voice.test");
 	g_signal_connect(test, "toggled",
 	                 G_CALLBACK(toggle_voice_test_cb), win);
+	win->vv.voice.test = GTK_WIDGET(test);
 }
 
 static GstElement *
@@ -3251,15 +3256,10 @@
 		enable_video_test(win);
 		g_signal_connect(test, "destroy",
 		                 G_CALLBACK(video_test_destroy_cb), win);
-		g_signal_connect(win->stack, "notify::visible-child",
-		                 G_CALLBACK(vv_test_switch_page_cb), test);
 	} else {
 		g_object_disconnect(test, "any-signal::destroy",
 		                    G_CALLBACK(video_test_destroy_cb), win,
 		                    NULL);
-		g_object_disconnect(win->stack, "any-signal::notify",
-		                    G_CALLBACK(vv_test_switch_page_cb), test,
-		                    NULL);
 		video_test_destroy_cb(NULL, win);
 	}
 }
@@ -3288,9 +3288,10 @@
 	gtk_widget_set_visual(video, gdk_screen_get_system_visual(
 	                                     gtk_widget_get_screen(video)));
 
-	test = gtk_builder_get_object(builder, "vv.video.test_button");
+	test = gtk_builder_get_object(builder, "vv.video.test");
 	g_signal_connect(test, "toggled",
 	                 G_CALLBACK(toggle_video_test_cb), win);
+	win->vv.video.test = GTK_WIDGET(test);
 }
 
 static void
@@ -3447,6 +3448,9 @@
 
 	bind_video_test(win, builder);
 
+	g_signal_connect(win->stack, "notify::visible-child",
+	                 G_CALLBACK(vv_test_switch_page_cb), win);
+
 	g_object_ref(ret);
 	g_object_unref(builder);
 

mercurial