marlin r1280 - in trunk: marlin src src/dialogs



Author: iain
Date: Tue Sep 30 19:14:07 2008
New Revision: 1280
URL: http://svn.gnome.org/viewvc/marlin?rev=1280&view=rev

Log:
Fix a lot of crashes in the dialogs
Play the sample at the correct speed


Modified:
   trunk/marlin/marlin-jack-play.c
   trunk/marlin/marlin-jack.c
   trunk/marlin/marlin-sample.c
   trunk/src/dialogs/marlin-add-marker-dialog.c
   trunk/src/dialogs/marlin-adjust-channel-dialogs.c
   trunk/src/dialogs/marlin-crossfade-dialog.c
   trunk/src/dialogs/marlin-edit-marker-dialog.c
   trunk/src/dialogs/marlin-select-region-dialog.c
   trunk/src/dialogs/marlin-undo-history-dialog.c
   trunk/src/marlin-window-menu.c

Modified: trunk/marlin/marlin-jack-play.c
==============================================================================
--- trunk/marlin/marlin-jack-play.c	(original)
+++ trunk/marlin/marlin-jack-play.c	Tue Sep 30 19:14:07 2008
@@ -86,7 +86,7 @@
 
 	guint channels;
 
-	guint rate, jrate;
+	guint sample_rate, jack_rate;
 	double src_ratio;
 
 	struct _port_data **port_data;
@@ -111,9 +111,9 @@
 {
 	MarlinJackPlayPrivate *priv;
 	int i;
-	
+
 	priv = jack->priv;
-	
+
 	for (i = 0; i < priv->channels; i++) {
 		struct _port_data *pd = priv->port_data[i];
 
@@ -156,7 +156,7 @@
 						   JACK_DEFAULT_AUDIO_TYPE,
 						   JackPortIsOutput, 0);
                 g_free (name);
-		
+
 		priv->port_data[i] = pd;
 	}
 }
@@ -223,14 +223,14 @@
 		MarlinJackPlay *jack)
 {
 	MarlinJackPlayPrivate *priv = jack->priv;
-	
-	if (strcmp (pspec->name, "sample_rate") == 0) {
+
+	if (strcmp (pspec->name, "sample-rate") == 0) {
 		g_object_get (object,
-			      "sample_rate", &priv->rate,
+			      "sample-rate", &priv->sample_rate,
 			      NULL);
-		
-		priv->src_ratio = calculate_rate_ratio (priv->rate, 
-							priv->jrate);
+
+		priv->src_ratio = calculate_rate_ratio (priv->sample_rate,
+							priv->jack_rate);
 		return;
 	}
 
@@ -254,35 +254,38 @@
 
 	if (priv->sample) {
 		free_ports ((MarlinJackPlay *) jack);
-		
-		g_signal_handler_disconnect (priv->sample, 
+
+		g_signal_handler_disconnect (priv->sample,
 					     priv->sample_notify_id);
 		g_object_unref (priv->sample);
 	}
-	
+
 	priv->sample = sample;
 	g_object_ref (priv->sample);
 	g_object_get (G_OBJECT (priv->sample),
 		      "channels", &priv->channels,
-		      "sample_rate", &priv->rate,
+		      "sample_rate", &priv->sample_rate,
 		      NULL);
-	
+
 	priv->sample_notify_id = g_signal_connect (priv->sample,
 						   "notify",
 						   G_CALLBACK (sample_changed),
 						   jack);
-	
+
+	priv->src_ratio = calculate_rate_ratio (priv->sample_rate,
+						priv->jack_rate);
+
 	setup_ports ((MarlinJackPlay *) jack);
 }
 
 /**
  * How the process functions work.
- * There are two threads: Thread A is the main GUI thread, thread B is the 
+ * There are two threads: Thread A is the main GUI thread, thread B is the
  * JACK process thread. Thread B is not able to do anything that is not
  * realtime safe. This includes the necessary things to access the frame
  * data, which is mmapped from disk and may require mmap calls and locking.
  *
- * When start_playing is called, an idle function is started that calls 
+ * When start_playing is called, an idle function is started that calls
  * process_writer. This is run in thread A and is able to do all the mmapping
  * safely. Because it is run in the main thread, the frame data can be accessed
  * without locking. process_writer copies enough frame data to fill the ring
@@ -300,16 +303,16 @@
 	guint frames_needed = 0;
 	guint64 tmp_pos;
 	int i;
-	
+
 	priv = jack->priv;
-	
+
 	/* Always output in stereo, even when we've got a mono sample */
 	for (i = 0; i < 2; i++) {
 		struct _port_data *pd = priv->port_data[i];
 		jack_default_audio_sample_t *o_buf;
 		size_t bytes_avail;
 		guint frames_avail, blank;
-		
+
 		bytes_avail = jack_ringbuffer_read_space (pd->rb);
 		frames_avail = bytes_avail / frame_size;
 		frames_needed = MIN (frames_avail, nframes);
@@ -339,7 +342,7 @@
 		tmp_pos = (tmp_pos - priv->finish) + priv->start;
 	}
 	priv->position = tmp_pos;
-	
+
 	priv->eos = eos;
 }
 
@@ -354,10 +357,10 @@
 	for (i = 0; i < 2; i++) {
 		struct _port_data *pd = priv->port_data[i];
 		jack_default_audio_sample_t *o_buf;
-		
+
 		o_buf = jack_port_get_buffer (pd->playback, nframes);
 		/* Zero this so that there is silence */
-		memset (o_buf, 0, 
+		memset (o_buf, 0,
 			nframes * frame_size);
 	}
 }
@@ -373,9 +376,9 @@
 	case MARLIN_JACK_PLAY_MODE_PLAYING:
 		process_playing (jack, nframes);
 		break;
-		
+
 	case MARLIN_JACK_PLAY_MODE_PREROLLING:
-	case MARLIN_JACK_PLAY_MODE_STOPPED:		
+	case MARLIN_JACK_PLAY_MODE_STOPPED:
 		process_silence (jack, nframes);
 		break;
 
@@ -411,12 +414,12 @@
 	}
 
 	copied = marlin_block_get_buffer (pd->current_block, pd->tmp_buffer,
-					  pd->offset, frames_needed, 
+					  pd->offset, frames_needed,
 					  &pd->current_block);
 
 	pd->offset += copied;
 	pd->offset_in_block = pd->offset - pd->current_block->start;
-	
+
 	*data = pd->tmp_buffer;
 
 	return copied;
@@ -480,15 +483,16 @@
 }
 
 static int
-srate_changed (jack_nframes_t nframes, 
+srate_changed (jack_nframes_t nframes,
 	       gpointer       data)
 {
 	MarlinJackPlay *jack = data;
 	MarlinJackPlayPrivate *priv = jack->priv;
 
-	priv->jrate = nframes;
-	priv->src_ratio = calculate_rate_ratio (priv->rate, priv->jrate);
-	
+	priv->jack_rate = nframes;
+	priv->src_ratio = calculate_rate_ratio (priv->sample_rate,
+						priv->jack_rate);
+
 	return 0;
 }
 
@@ -506,7 +510,7 @@
 
 	return 0;
 }
-	
+
 static gboolean
 play_start (MarlinJack *jack,
 	    GError    **error)
@@ -545,9 +549,9 @@
 			marlin_sample_read_unlock (priv->sample);
 			return FALSE;
 		}
-		
+
 		if (i < priv->channels) {
-			pd->channel = marlin_sample_get_channel (priv->sample, 
+			pd->channel = marlin_sample_get_channel (priv->sample,
 								 i);
 		} else {
 			pd->channel = marlin_sample_get_channel (priv->sample, 0);
@@ -564,8 +568,8 @@
 		pd->rb_buffer = g_new (float, DEFAULT_RB_SIZE);
 		pd->tmp_buffer = g_new (float, DEFAULT_RB_SIZE);
 
-		pd->state = src_callback_new (process_more_frames, 
-					      SRC_SINC_BEST_QUALITY, 
+		pd->state = src_callback_new (process_more_frames,
+					      SRC_SINC_BEST_QUALITY,
 					      1, &err, pd);
 	}
 	free (ports);
@@ -674,7 +678,7 @@
 						G_TYPE_FROM_CLASS (klass),
 						G_SIGNAL_RUN_FIRST |
 						G_SIGNAL_NO_RECURSE,
-						G_STRUCT_OFFSET (MarlinJackPlayClass, 
+						G_STRUCT_OFFSET (MarlinJackPlayClass,
 status_changed),
 						NULL, NULL,
 						g_cclosure_marshal_VOID__INT,
@@ -729,7 +733,7 @@
 
 	jack = g_object_new (MARLIN_JACK_PLAY_TYPE, NULL);
 	priv = jack->priv;
-	
+
 	if (server_name) {
 		options |= JackServerName;
 	}
@@ -749,7 +753,7 @@
 	priv->jack_buf = g_new0 (jack_default_audio_sample_t, priv->bufsize * 16);
 
 	jack_set_sample_rate_callback (priv->client, srate_changed, jack);
-	priv->jrate = jack_get_sample_rate (priv->client);
+	priv->jack_rate = jack_get_sample_rate (priv->client);
 
 	return jack;
 }
@@ -777,7 +781,7 @@
  * @jack: A #MarlinJackPlay
  * @start: Start of the playback range
  * @finish: End of the playback range
- * 
+ *
  * Sets @jack to playback between @start and @finish
  */
 void

Modified: trunk/marlin/marlin-jack.c
==============================================================================
--- trunk/marlin/marlin-jack.c	(original)
+++ trunk/marlin/marlin-jack.c	Tue Sep 30 19:14:07 2008
@@ -82,7 +82,7 @@
 dispose (GObject *object)
 {
 	MarlinJackPrivate *priv = GET_PRIVATE (object);
-	
+
 	if (priv->sample) {
 		g_object_unref (priv->sample);
 		priv->sample = NULL;
@@ -115,7 +115,7 @@
 			      NULL);
 
 		if (j_class->set_sample) {
-			j_class->set_sample (MARLIN_JACK (object), 
+			j_class->set_sample (MARLIN_JACK (object),
 					     priv->sample);
 		}
 		break;

Modified: trunk/marlin/marlin-sample.c
==============================================================================
--- trunk/marlin/marlin-sample.c	(original)
+++ trunk/marlin/marlin-sample.c	Tue Sep 30 19:14:07 2008
@@ -76,7 +76,7 @@
 	gboolean dirty; /* Has the sample been edited since the last save? */
 	gboolean writable; /* Is the filename writable? */
 	gboolean revertable; /* Has the sample got revert info? */
-	
+
 	/* Sample information */
 	guint64 number_of_frames; /* Total number of frames */
 	int channels; /* Number of channels */
@@ -192,7 +192,7 @@
 
 	sample = MARLIN_SAMPLE (object);
 	priv = sample->priv;
-	
+
 	switch (prop_id) {
 	case PROP_NUMBER_OF_FRAMES:
 		WRITE_LOCK (priv->lock);
@@ -213,7 +213,7 @@
 
 	case PROP_SAMPLE_RATE:
 		WRITE_LOCK (priv->lock);
-		
+
 		sample_rate = g_value_get_uint (value);
 		if (priv->sample_rate == sample_rate) {
 			WRITE_UNLOCK (priv->lock);
@@ -230,7 +230,7 @@
 
 	case PROP_FILENAME:
 		WRITE_LOCK (priv->lock);
-		
+
 		if (priv->filename != NULL) {
 			g_free (priv->filename);
 		}
@@ -245,7 +245,7 @@
 		} else {
 			priv->writable = TRUE;
 		}
-		
+
 		WRITE_UNLOCK (priv->lock);
 		break;
 

Modified: trunk/src/dialogs/marlin-add-marker-dialog.c
==============================================================================
--- trunk/src/dialogs/marlin-add-marker-dialog.c	(original)
+++ trunk/src/dialogs/marlin-add-marker-dialog.c	Tue Sep 30 19:14:07 2008
@@ -43,7 +43,7 @@
 
 struct _AddDialog {
 	MarlinSample *sample;
-	MarlinUndoManager *undo;
+	MarlinUndoManager *undo_manager;
 
 	GtkWidget *dialog;
 	GtkWidget *entry;
@@ -64,7 +64,7 @@
 	
 	switch (response_id) {
 	case GTK_RESPONSE_OK:
-		ctxt = marlin_undo_manager_context_begin (ad->undo,
+		ctxt = marlin_undo_manager_context_begin (ad->undo_manager,
 							  _("Add Marker"));
 		
 		name = gtk_entry_get_text (GTK_ENTRY (ad->entry));
@@ -75,7 +75,7 @@
 		pos = (guint64) adj->value;
 
 		marlin_marker_model_add_marker (ad->model, pos, name, ctxt);
-		marlin_undo_manager_context_end (ad->undo, ctxt);
+		marlin_undo_manager_context_end (ad->undo_manager, ctxt);
 		break;
 			
 	case GTK_RESPONSE_HELP:
@@ -89,7 +89,7 @@
 
 	gtk_widget_destroy (GTK_WIDGET (dialog));
 
-	/* FIXME: Do model and undo need to be unreffed now? */
+	/* FIXME: Does model need to be unreffed now? */
 	g_free (ad);
 }
 
@@ -98,7 +98,6 @@
 {
 	MarlinSample *sample;
 	GtkWindow *parent;
-	MarlinUndoManager *undo;
 	MarlinMarkerModel *model;
 	char *name, *title;
 	GtkWidget *vbox, *table, *label;
@@ -113,12 +112,11 @@
 	g_object_get (G_OBJECT (sample),
 		      "name", &name,
 		      "marker-model", &model,
-		      "undo_manager", &undo,
 		      NULL);
 
 	ad = g_new (struct _AddDialog, 1);
 	ad->sample = sample;
-	ad->undo = undo;
+	ad->undo_manager = marlin_base_window_get_undo_manager (base);
 	ad->model = model;
 
 	title = g_strdup_printf ("Add Marker: %s", name);

Modified: trunk/src/dialogs/marlin-adjust-channel-dialogs.c
==============================================================================
--- trunk/src/dialogs/marlin-adjust-channel-dialogs.c	(original)
+++ trunk/src/dialogs/marlin-adjust-channel-dialogs.c	Tue Sep 30 19:14:07 2008
@@ -44,6 +44,7 @@
 
 struct _remove_channel_data {
 	MarlinSample *sample;
+	MarlinUndoManager *undo_manager;
 
 	GtkWidget *dialog;
 	GtkWidget *left, *right;
@@ -56,7 +57,6 @@
 			  struct _remove_channel_data *rcd)
 {
 	MarlinChannelPosition channel;
-	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
 
 	switch (response_id) {
@@ -73,17 +73,13 @@
 			g_assert_not_reached ();
 		}
 
-		g_object_get (G_OBJECT (rcd->sample),
-			      "undo-manager", &undo,
-			      NULL);
-
-		ctxt = marlin_undo_manager_context_begin (undo, _("Remove Channel"));
+		ctxt = marlin_undo_manager_context_begin (rcd->undo_manager, 
+							  _("Remove Channel"));
 		marlin_sample_remove_channel (rcd->sample,
 					      channel, 
 					      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rcd->mix)),
 					      NULL, ctxt, NULL);
-		marlin_undo_manager_context_end (undo, ctxt);
-		g_object_unref (G_OBJECT (undo));
+		marlin_undo_manager_context_end (rcd->undo_manager, ctxt);
 
 		break;
 
@@ -114,6 +110,7 @@
 
 	rcd = g_new (struct _remove_channel_data, 1);
 	rcd->sample = sample;
+	rcd->undo_manager = marlin_base_window_get_undo_manager (base);
 
 	g_object_get (G_OBJECT (sample),
 		      "name", &name,
@@ -191,6 +188,7 @@
 
 struct _add_channel_data {
 	MarlinSample *sample;
+	MarlinUndoManager *undo_manager;
 
 	GtkWidget *dialog;
 	GtkWidget *left, *right;
@@ -203,7 +201,6 @@
 		       struct _add_channel_data *acd)
 {
 	MarlinChannelPosition channel;
-	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
 
 	switch (response_id) {
@@ -220,15 +217,12 @@
 			g_assert_not_reached ();
 		}
 
-		g_object_get (G_OBJECT (acd->sample),
-			      "undo-manager", &undo,
-			      NULL);
-		ctxt = marlin_undo_manager_context_begin (undo, _("Add Channel"));
+		ctxt = marlin_undo_manager_context_begin (acd->undo_manager, 
+							  _("Add Channel"));
 		marlin_sample_add_channel (acd->sample, channel,
 					   gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (acd->clone)),
 					   NULL, ctxt, NULL);
-		marlin_undo_manager_context_end (undo, ctxt);
-		g_object_unref (G_OBJECT (undo));
+		marlin_undo_manager_context_end (acd->undo_manager, ctxt);
 		break;
 
 	case GTK_RESPONSE_CANCEL:
@@ -258,6 +252,7 @@
 
 	acd = g_new (struct _add_channel_data, 1);
 	acd->sample = sample;
+	acd->undo_manager = marlin_base_window_get_undo_manager (base);
 
 	g_object_get (G_OBJECT (sample),
 		      "name", &name,

Modified: trunk/src/dialogs/marlin-crossfade-dialog.c
==============================================================================
--- trunk/src/dialogs/marlin-crossfade-dialog.c	(original)
+++ trunk/src/dialogs/marlin-crossfade-dialog.c	Tue Sep 30 19:14:07 2008
@@ -50,6 +50,7 @@
 	GtkWidget *start, *end, *both;
 #endif
 	MarlinSample *sample;
+	MarlinUndoManager *undo_manager;
 };
 
 static void
@@ -155,7 +156,6 @@
 	MarlinSampleFade sf, df;
 	MarlinSample *src, *dest;
 	guint64 length, position;
-	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
 	MarlinRange range;
 	
@@ -164,10 +164,6 @@
 		src = MARLIN_SAMPLE (marlin_program_get_clipboard (program));
 		dest = xfd->sample;
 
-		g_object_get (G_OBJECT (dest),
-			      "undo-manager", &undo,
-			      NULL);
-		
 		g_object_get (G_OBJECT (src),
 			      "total_frames", &length,
 			      NULL);
@@ -177,7 +173,8 @@
 		range.start = 0;
 		range.finish = length - 1;
 
-		ctxt = marlin_undo_manager_context_begin (undo, _("Crossfade"));
+		ctxt = marlin_undo_manager_context_begin (xfd->undo_manager,
+							  _("Crossfade"));
 
 		marlin_cross_fader_get_levels (MARLIN_CROSS_FADER (xfd->xfade),
 					       &sf.in_level, &sf.out_level,
@@ -190,7 +187,7 @@
 		df.fade_end = position + (length - 1);
 
 		marlin_sample_crossfade (src, dest, &sf, &df, NULL, ctxt, NULL);
-		marlin_undo_manager_context_end (undo, ctxt);
+		marlin_undo_manager_context_end (xfd->undo_manager, ctxt);
 
 		save_settings (xfd);
 		break;
@@ -240,6 +237,7 @@
 	xfd = g_new (struct _xfade_dialog_data, 1);
 	xfd->window = window;
 	xfd->sample = sample;
+	xfd->undo_manager = marlin_base_window_get_undo_manager (base);
 
 	g_object_get (G_OBJECT (sample),
 		      "name", &name,

Modified: trunk/src/dialogs/marlin-edit-marker-dialog.c
==============================================================================
--- trunk/src/dialogs/marlin-edit-marker-dialog.c	(original)
+++ trunk/src/dialogs/marlin-edit-marker-dialog.c	Tue Sep 30 19:14:07 2008
@@ -43,7 +43,7 @@
 
 struct _EditDialog {
 	MarlinSample *sample;
-	MarlinUndoManager *undo;
+	MarlinUndoManager *undo_manager;
 
 	GtkWidget *dialog;
 	GtkWidget *entry;
@@ -65,7 +65,7 @@
 	
 	switch (response_id) {
 	case GTK_RESPONSE_OK:
-		ctxt = marlin_undo_manager_context_begin (ed->undo,
+		ctxt = marlin_undo_manager_context_begin (ed->undo_manager,
 							  _("Edit Marker"));
 		
 		name = gtk_entry_get_text (GTK_ENTRY (ed->entry));
@@ -85,7 +85,7 @@
 		marlin_marker_model_move_marker (ed->model,
 						 ed->marker,
 						 pos, ctxt);
-		marlin_undo_manager_context_end (ed->undo, ctxt);
+		marlin_undo_manager_context_end (ed->undo_manager, ctxt);
 		break;
 			
 	case GTK_RESPONSE_HELP:
@@ -98,7 +98,7 @@
 	}
 
 	gtk_widget_destroy (GTK_WIDGET (dialog));
-	/* FIXME: We need to unref undo and model here */
+	/* FIXME: We need to unref model here */
 	g_free (ed);
 }
 
@@ -122,11 +122,11 @@
 	ed = g_new (struct _EditDialog, 1);
 	ed->sample = sample;
 	ed->marker = marlin_marker_view_get_selected_marker (view);
+	ed->undo_manager = marlin_base_window_get_undo_manager (base);
 
 	g_object_get (G_OBJECT (sample),
 		      "name", &name,
 		      "markers", &ed->model,
-		      "undo_manager", &ed->undo,
 		      NULL);
 
 	title = g_strdup_printf ("Edit Marker: %s", name);

Modified: trunk/src/dialogs/marlin-select-region-dialog.c
==============================================================================
--- trunk/src/dialogs/marlin-select-region-dialog.c	(original)
+++ trunk/src/dialogs/marlin-select-region-dialog.c	Tue Sep 30 19:14:07 2008
@@ -47,6 +47,7 @@
 	GtkWidget *window;
 	MarlinSample *sample;
 	MarlinSampleSelection *selection;
+	MarlinUndoManager *undo_manager;
 	GtkWidget *start, *finish;
 	GtkWidget *start_combo, *finish_combo;
 	GtkWidget *sp_hbox, *sm_hbox, *fp_hbox, *fm_hbox;
@@ -83,7 +84,6 @@
 	int start_active, end_active;
 	guint64 start, finish;
 	MarlinDisplay display;
-	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
 	MarlinMarker *marker;
 	MarlinCoverage coverage;
@@ -157,10 +157,7 @@
 		
 		marlin_sample_selection_clear (srd->selection, NULL);
 
-		g_object_get (G_OBJECT (srd->sample),
-			      "undo-manager", &undo,
-			      NULL);
-		ctxt = marlin_undo_manager_context_begin (undo,
+		ctxt = marlin_undo_manager_context_begin (srd->undo_manager,
 							  _("Select Region"));
 
 		coverage = gtk_combo_box_get_active (GTK_COMBO_BOX (srd->coverage));
@@ -174,8 +171,7 @@
 		marlin_sample_selection_set (srd->selection, 
 					     coverage, 
 					     start, finish, ctxt);
-		marlin_undo_manager_context_end (undo, ctxt);
-		g_object_unref (G_OBJECT (undo));
+		marlin_undo_manager_context_end (srd->undo_manager, ctxt);
 
 		break;
 		
@@ -328,7 +324,7 @@
 	srd->window = GTK_WIDGET (window);
 	srd->sample = sample;
 	srd->position = position;
-
+	srd->undo_manager = marlin_base_window_get_undo_manager (base);
 	g_object_get (G_OBJECT (view),
 		      "frames_per_pixel", &srd->fpp,
 		      NULL);

Modified: trunk/src/dialogs/marlin-undo-history-dialog.c
==============================================================================
--- trunk/src/dialogs/marlin-undo-history-dialog.c	(original)
+++ trunk/src/dialogs/marlin-undo-history-dialog.c	Tue Sep 30 19:14:07 2008
@@ -47,7 +47,7 @@
 
 struct _undo_history_data {
 	MarlinSample *sample;
-	MarlinUndoManager *undo;
+	MarlinUndoManager *undo_manager;
 
 	GtkWidget *dialog, *treeview;
 	GtkWidget *undo_button, *redo_button;
@@ -62,9 +62,9 @@
 		       struct _undo_history_data *uhd)
 {
 	if (uhd->changed_id > 0) {
-		g_signal_handler_disconnect (uhd->undo, uhd->changed_id);
+		g_signal_handler_disconnect (uhd->undo_manager, 
+					     uhd->changed_id);
 	}
-	g_object_unref (G_OBJECT (uhd->undo));
 	g_free (uhd);
 }
 
@@ -89,7 +89,7 @@
 	int i;
 	GtkTreePath *current = NULL;
 
-	history = marlin_undo_manager_get_history (uhd->undo);
+	history = marlin_undo_manager_get_history (uhd->undo_manager);
 
 	for (h = history, i = 0; h; h = h->next, i++) {
 		MarlinUndoHistory *hist = h->data;
@@ -148,9 +148,9 @@
 	      struct _undo_history_data *uhd)
 {
 	gtk_widget_set_sensitive (uhd->undo_button,
-				  marlin_undo_manager_can_undo (uhd->undo));
+				  marlin_undo_manager_can_undo (uhd->undo_manager));
 	gtk_widget_set_sensitive (uhd->redo_button,
-				  marlin_undo_manager_can_redo (uhd->undo));
+				  marlin_undo_manager_can_redo (uhd->undo_manager));
 
 	g_signal_handlers_block_matched (uhd->selection,
 					 G_SIGNAL_MATCH_FUNC,
@@ -168,14 +168,14 @@
 undo_clicked (GtkButton *undo,
 	      struct _undo_history_data *uhd)
 {
-	marlin_undo_manager_undo (uhd->undo);
+	marlin_undo_manager_undo (uhd->undo_manager);
 }
 
 static void
 redo_clicked (GtkButton *undo,
 	      struct _undo_history_data *uhd)
 {
-	marlin_undo_manager_redo (uhd->undo);
+	marlin_undo_manager_redo (uhd->undo_manager);
 }
 
 GtkWidget *
@@ -194,13 +194,13 @@
 
 	uhd = g_new (struct _undo_history_data, 1);
 	uhd->sample = sample;
+	uhd->undo_manager = marlin_base_window_get_undo_manager (base);
 
 	g_object_get (G_OBJECT (sample),
 		      "name", &name,
-		      "undo-manager", &uhd->undo,
 		      NULL);
 
-	uhd->changed_id = g_signal_connect (uhd->undo, "changed",
+	uhd->changed_id = g_signal_connect (uhd->undo_manager, "changed",
 					    G_CALLBACK (undo_changed), uhd);
 
 	title = g_strdup_printf (_("Undo History: %s"), name);
@@ -270,9 +270,9 @@
 			  G_CALLBACK (redo_clicked), uhd);
 
 	gtk_widget_set_sensitive (uhd->undo_button,
-				  marlin_undo_manager_can_undo (uhd->undo));
+				  marlin_undo_manager_can_undo (uhd->undo_manager));
 	gtk_widget_set_sensitive (uhd->redo_button,
-				  marlin_undo_manager_can_redo (uhd->undo));
+				  marlin_undo_manager_can_redo (uhd->undo_manager));
 
 	g_signal_connect (uhd->dialog, "destroy",
 			  G_CALLBACK (undo_history_response), uhd);

Modified: trunk/src/marlin-window-menu.c
==============================================================================
--- trunk/src/marlin-window-menu.c	(original)
+++ trunk/src/marlin-window-menu.c	Tue Sep 30 19:14:07 2008
@@ -405,6 +405,7 @@
 edit_select_all (GtkAction *action,
 		 gpointer data)
 {
+	MarlinBaseWindow *base = MARLIN_BASE_WINDOW (data);
 	MarlinSample *sample;
 	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
@@ -412,16 +413,13 @@
 	g_object_get (G_OBJECT (data),
 		      "sample", &sample,
 		      NULL);
-	g_object_get (G_OBJECT (sample),
-		      "undo-manager", &undo,
-		      NULL);
-	
+
+	undo = marlin_base_window_get_undo_manager (base);
 	ctxt = marlin_undo_manager_context_begin (undo, _("Select All"));
 	
 	marlin_window_select_all (MARLIN_WINDOW (data), ctxt);
 
 	marlin_undo_manager_context_end (undo, ctxt);
-	g_object_unref (G_OBJECT (undo));
 	g_object_unref (G_OBJECT (sample));
 }
 
@@ -429,6 +427,7 @@
 edit_select_none (GtkAction *action,
 		  gpointer data)
 {
+	MarlinBaseWindow *base = MARLIN_BASE_WINDOW (data);
 	MarlinSample *sample;
 	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
@@ -436,16 +435,13 @@
 	g_object_get (G_OBJECT (data),
 		      "sample", &sample,
 		      NULL);
-	g_object_get (G_OBJECT (sample),
-		      "undo-manager", &undo,
-		      NULL);
-	
+
+	undo = marlin_base_window_get_undo_manager (base);
 	ctxt = marlin_undo_manager_context_begin (undo, _("Select Nothing"));
 	
 	marlin_window_select_none (MARLIN_WINDOW (data), ctxt);
 
 	marlin_undo_manager_context_end (undo, ctxt);
-	g_object_unref (G_OBJECT (undo));
 	g_object_unref (G_OBJECT (sample));
 }
 
@@ -467,6 +463,7 @@
 selection_halve (GtkAction *action,
 		 gpointer data)
 {
+	MarlinBaseWindow *base = MARLIN_BASE_WINDOW (data);
 	MarlinSample *sample;
 	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
@@ -474,15 +471,12 @@
 	g_object_get (G_OBJECT (data),
 		      "sample", &sample,
 		      NULL);
-	g_object_get (G_OBJECT (sample),
-		      "undo-manager", &undo,
-		      NULL);
-	
+
+	undo = marlin_base_window_get_undo_manager (base);
 	ctxt = marlin_undo_manager_context_begin (undo, _("Halve Selection"));
 
 	marlin_window_selection_scale (MARLIN_WINDOW (data), 0.5, ctxt);
 	marlin_undo_manager_context_end (undo, ctxt);
-	g_object_unref (G_OBJECT (undo));
 	g_object_unref (G_OBJECT (sample));
 }
 
@@ -490,6 +484,7 @@
 selection_double (GtkAction *action,
 		  gpointer data)
 {
+	MarlinBaseWindow *base = MARLIN_BASE_WINDOW (data);
 	MarlinSample *sample;
 	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
@@ -497,15 +492,12 @@
 	g_object_get (G_OBJECT (data),
 		      "sample", &sample,
 		      NULL);
-	g_object_get (G_OBJECT (sample),
-		      "undo-manager", &undo,
-		      NULL);
-	
+
+	undo = marlin_base_window_get_undo_manager (base);
 	ctxt = marlin_undo_manager_context_begin (undo, _("Double Selection"));
 
 	marlin_window_selection_scale (MARLIN_WINDOW (data), 2.0, ctxt);
 	marlin_undo_manager_context_end (undo, ctxt);
-	g_object_unref (G_OBJECT (undo));
 	g_object_unref (G_OBJECT (sample));
 }
 
@@ -513,6 +505,7 @@
 selection_left (GtkAction *action,
 		gpointer data)
 {
+	MarlinBaseWindow *base = MARLIN_BASE_WINDOW (data);
 	MarlinSample *sample;
 	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
@@ -520,16 +513,13 @@
 	g_object_get (G_OBJECT (data),
 		      "sample", &sample,
 		      NULL);
-	g_object_get (G_OBJECT (sample),
-		      "undo-manager", &undo,
-		      NULL);
-	
+
+	undo = marlin_base_window_get_undo_manager (base);
 	ctxt = marlin_undo_manager_context_begin (undo, _("Shift Selection Left"));
 
 	marlin_window_selection_shift_left (MARLIN_WINDOW (data), ctxt);
 
 	marlin_undo_manager_context_end (undo, ctxt);
-	g_object_unref (G_OBJECT (undo));
 	g_object_unref (G_OBJECT (sample));
 }
 
@@ -537,6 +527,7 @@
 selection_right (GtkAction *action,
 		 gpointer data)
 {
+	MarlinBaseWindow *base = MARLIN_BASE_WINDOW (data);
 	MarlinSample *sample;
 	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
@@ -544,16 +535,13 @@
 	g_object_get (G_OBJECT (data),
 		      "sample", &sample,
 		      NULL);
-	g_object_get (G_OBJECT (sample),
-		      "undo-manager", &undo,
-		      NULL);
-	
+
+	undo = marlin_base_window_get_undo_manager (base);
 	ctxt = marlin_undo_manager_context_begin (undo, _("Shift Selection Right"));
 
 	marlin_window_selection_shift_right (MARLIN_WINDOW (data), ctxt);
 
 	marlin_undo_manager_context_end (undo, ctxt);
-	g_object_unref (G_OBJECT (undo));
 	g_object_unref (G_OBJECT (sample));
 }
 
@@ -561,6 +549,7 @@
 selection_snap_to_zero (GtkAction *action,
 			gpointer data)
 {
+	MarlinBaseWindow *base = MARLIN_BASE_WINDOW (data);
 	MarlinSample *sample;
 	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
@@ -568,15 +557,12 @@
 	g_object_get (G_OBJECT (data),
 		      "sample", &sample,
 		      NULL);
-	g_object_get (G_OBJECT (sample),
-		      "undo-manager", &undo,
-		      NULL);
 
+	undo = marlin_base_window_get_undo_manager (base);
 	ctxt = marlin_undo_manager_context_begin (undo, _("Snap To Zero Crossing"));
 	marlin_window_selection_snap_to_zero (MARLIN_WINDOW (data), ctxt);
 
 	marlin_undo_manager_context_end (undo, ctxt);
-	g_object_unref (G_OBJECT (undo));
 	g_object_unref (G_OBJECT (sample));
 }
 
@@ -708,6 +694,7 @@
 process_swap_channels (GtkAction *action,
 		       gpointer data)
 {
+	MarlinBaseWindow *base = MARLIN_BASE_WINDOW (data);
 	MarlinSample *sample;
 	MarlinUndoManager *undo;
 	MarlinUndoContext *ctxt;
@@ -715,15 +702,12 @@
 	g_object_get (G_OBJECT (data),
 		      "sample", &sample,
 		      NULL);
-	g_object_get (G_OBJECT (sample),
-		      "undo-manager", &undo,
-		      NULL);
-	
+
+	undo = marlin_base_window_get_undo_manager (base);
 	ctxt = marlin_undo_manager_context_begin (undo, _("Swap Channels"));
 
 	marlin_sample_swap_channels (sample, NULL, ctxt, NULL);
 	marlin_undo_manager_context_end (undo, ctxt);
-	g_object_unref (G_OBJECT (undo));
 	g_object_unref (G_OBJECT (sample));
 }
 



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