marlin r1352 - trunk/src



Author: iain
Date: Thu Feb 12 23:51:42 2009
New Revision: 1352
URL: http://svn.gnome.org/viewvc/marlin?rev=1352&view=rev

Log:
Disconnect jack signals when the window is destroyed
Turn the Processing menu on when the sample stops playing

Modified:
   trunk/src/marlin-window.c

Modified: trunk/src/marlin-window.c
==============================================================================
--- trunk/src/marlin-window.c	(original)
+++ trunk/src/marlin-window.c	Thu Feb 12 23:51:42 2009
@@ -162,6 +162,9 @@
 	MarlinJackPlay *jack;
 	guint jack_owner_id;
 	guint32 owner_changed_id;
+	guint32 eos_id;
+	guint32 level_id;
+	guint32 position_id;
 
 	MarlinState state;
 	guint64 initial; /* The initial position of the cursor when play
@@ -309,6 +312,11 @@
 		program = marlin_program_get_default ();
 		g_signal_handler_disconnect (program, priv->owner_changed_id);
 
+		/* Turn off the jack signals */
+		g_signal_handler_disconnect (priv->jack, priv->eos_id);
+		g_signal_handler_disconnect (priv->jack, priv->level_id);
+		g_signal_handler_disconnect (priv->jack, priv->position_id);
+
 		/* Give up our jack ownership */
 		marlin_program_release_jack (program, priv->jack_owner_id);
 
@@ -1095,17 +1103,19 @@
 play_eos (MarlinJack   *jack,
 	  MarlinWindow *window)
 {
-	g_print ("play eos\n");
-	window->priv->state = MARLIN_STATE_STOPPED;
+	MarlinWindowPrivate *priv = window->priv;
 
-	g_object_set (G_OBJECT (window->priv->view),
+	priv->state = MARLIN_STATE_STOPPED;
+
+	g_object_set (G_OBJECT (priv->view),
 		      "show_play_cursor", FALSE,
 		      NULL);
 
-	marlin_window_move_cursor_to (window, window->priv->initial);
+	marlin_window_move_cursor_to (window, priv->initial);
 
-	gtk_vumeter_set_levels (GTK_VUMETER (window->priv->left_vu), 0.0, 0.0);
-	gtk_vumeter_set_levels (GTK_VUMETER (window->priv->right_vu), 0.0, 0.0);
+	gtk_vumeter_set_levels (GTK_VUMETER (priv->left_vu), 0.0, 0.0);
+	gtk_vumeter_set_levels (GTK_VUMETER (priv->right_vu), 0.0, 0.0);
+	set_path_sensitive (priv->ui_action, "Process", TRUE);
 }
 
 static void
@@ -1458,11 +1468,27 @@
 		       MarlinWindow  *window)
 {
 	MarlinWindowPrivate *priv = window->priv;
+	gboolean own_jack = (jack_owner == priv->jack_owner_id);
 
 	/* If we are the jack owner then turn on the
 	   play/pause/record actions */
-	marlin_window_set_jack_sensitive (window,
-					  priv->jack_owner_id == jack_owner);
+	marlin_window_set_jack_sensitive (window, own_jack);
+
+#if 0
+	/* If we don't own jack, we don't want to know about any of
+	   its events. We'll just get confused */
+	if (own_jack) {
+		g_print ("Unblocking signals\n");
+		g_signal_handler_unblock (priv->jack, priv->eos_id);
+		g_signal_handler_unblock (priv->jack, priv->level_id);
+		g_signal_handler_unblock (priv->jack, priv->position_id);
+	} else {
+		g_print ("Blocking signals\n");
+		g_signal_handler_block (priv->jack, priv->eos_id);
+		g_signal_handler_block (priv->jack, priv->level_id);
+		g_signal_handler_block (priv->jack, priv->position_id);
+	}
+#endif
 }
 
 MarlinWindow *
@@ -1717,18 +1743,21 @@
 					  G_CALLBACK (jack_owner_changed_cb),
 					  window);
 
-		g_signal_connect (priv->jack, "eos",
-				  G_CALLBACK (play_eos), window);
+		priv->eos_id = g_signal_connect (priv->jack, "eos",
+						 G_CALLBACK (play_eos), window);
 
 		/* Turn on the level emissions */
 		g_object_set (priv->jack,
 			      "emit-level", TRUE,
 			      NULL);
-		g_signal_connect (priv->jack, "level-changed",
-				  G_CALLBACK (level_cb), window);
-
-		g_signal_connect (priv->jack, "position-changed",
-				  G_CALLBACK (position_changed), window);
+		priv->level_id = g_signal_connect (priv->jack, "level-changed",
+						   G_CALLBACK (level_cb),
+						   window);
+
+		priv->position_id = g_signal_connect (priv->jack,
+						      "position-changed",
+						      G_CALLBACK (position_changed),
+						      window);
 	} else {
 		display_no_jack_window (GTK_WIDGET (window));
 		set_path_sensitive (priv->ui_action, "MediaRecord", FALSE);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]