129
143
g_return_if_fail (priv->stamp == iter->stamp);
130
144
g_return_if_fail (iter->user_data != NULL);
132
file = iter->user_data;
146
track = iter->user_data;
147
if (!BRASERO_IS_TRACK_STREAM (track))
150
if (GPOINTER_TO_INT (iter->user_data2) == BRASERO_STREAM_ROW_GAP) {
152
case BRASERO_VIDEO_TREE_MODEL_NAME:
153
text = g_strdup_printf ("<i><b>%s</b></i>", _("Pause"));
154
g_value_init (value, G_TYPE_STRING);
155
g_value_set_string (value, text);
158
case BRASERO_VIDEO_TREE_MODEL_ICON_NAME:
159
g_value_init (value, G_TYPE_STRING);
160
g_value_set_string (value, GTK_STOCK_MEDIA_PAUSE);
162
case BRASERO_VIDEO_TREE_MODEL_EDITABLE:
163
case BRASERO_VIDEO_TREE_MODEL_SELECTABLE:
164
g_value_init (value, G_TYPE_BOOLEAN);
165
g_value_set_boolean (value, FALSE);
167
case BRASERO_VIDEO_TREE_MODEL_IS_GAP:
168
g_value_init (value, G_TYPE_BOOLEAN);
169
g_value_set_boolean (value, TRUE);
172
case BRASERO_VIDEO_TREE_MODEL_SIZE:
173
g_value_init (value, G_TYPE_STRING);
174
text = brasero_units_get_time_string (brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track)), TRUE, FALSE);
175
g_value_set_string (value, text);
179
case BRASERO_VIDEO_TREE_MODEL_INDEX:
180
case BRASERO_VIDEO_TREE_MODEL_ARTIST:
181
g_value_init (value, G_TYPE_STRING);
182
g_value_set_string (value, NULL);
185
case BRASERO_VIDEO_TREE_MODEL_THUMBNAIL:
186
case BRASERO_VIDEO_TREE_MODEL_INDEX_NUM:
188
g_value_init (value, G_TYPE_INVALID);
134
195
switch (column) {
135
196
case BRASERO_VIDEO_TREE_MODEL_NAME:
136
197
g_value_init (value, G_TYPE_STRING);
138
if (file->info && file->info->title)
139
g_value_set_string (value, file->info->title);
199
string = brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_TITLE_TAG);
201
g_value_set_string (value, string);
143
206
gchar *unescaped;
145
unescaped = g_uri_unescape_string (file->uri, NULL);
208
uri = brasero_track_stream_get_source (BRASERO_TRACK_STREAM (track), TRUE);
209
unescaped = g_uri_unescape_string (uri, NULL);
146
212
path = g_filename_from_uri (unescaped, NULL, NULL);
147
213
g_free (unescaped);
158
case BRASERO_VIDEO_TREE_MODEL_MIME_ICON:
224
case BRASERO_VIDEO_TREE_MODEL_ARTIST:
225
g_value_init (value, G_TYPE_STRING);
227
string = brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_ARTIST_TAG);
229
g_value_set_string (value, string);
233
case BRASERO_VIDEO_TREE_MODEL_ICON_NAME:
234
status = brasero_status_new ();
235
brasero_track_get_status (track, status);
236
g_value_init (value, G_TYPE_STRING);
239
if (brasero_status_get_result (status) == BRASERO_BURN_NOT_READY)
240
g_value_set_string (value, "image-loading");
241
else if (brasero_track_tag_lookup (track, BRASERO_TRACK_STREAM_MIME_TAG, &value_tag) == BRASERO_BURN_OK)
242
g_value_set_string (value, g_value_get_string (value_tag));
244
g_value_set_string (value, "image-missing");
246
brasero_status_free (status);
249
case BRASERO_VIDEO_TREE_MODEL_THUMBNAIL:
159
250
g_value_init (value, GDK_TYPE_PIXBUF);
161
if (file->snapshot) {
162
pixbuf = file->snapshot;
163
g_object_ref (file->snapshot);
165
else if (file->is_loading) {
252
status = brasero_status_new ();
253
brasero_track_get_status (track, status);
255
if (brasero_status_get_result (status) == BRASERO_BURN_NOT_READY)
166
256
pixbuf = gtk_icon_theme_load_icon (priv->theme,
173
pixbuf = gtk_icon_theme_load_icon (priv->theme,
263
brasero_track_tag_lookup (track,
264
BRASERO_TRACK_STREAM_THUMBNAIL_TAG,
268
pixbuf = g_value_dup_object (value_tag);
270
pixbuf = gtk_icon_theme_load_icon (priv->theme,
180
277
g_value_set_object (value, pixbuf);
181
278
g_object_unref (pixbuf);
280
brasero_status_free (status);
185
283
case BRASERO_VIDEO_TREE_MODEL_SIZE:
284
status = brasero_status_new ();
285
brasero_track_get_status (track, status);
186
287
g_value_init (value, G_TYPE_STRING);
188
if (!file->is_loading) {
189
text = brasero_units_get_time_string (file->end - file->start, TRUE, FALSE);
289
if (brasero_status_get_result (status) == BRASERO_BURN_OK) {
292
brasero_track_stream_get_length (BRASERO_TRACK_STREAM (track), &len);
293
len -= brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track));
294
text = brasero_units_get_time_string (len, TRUE, FALSE);
190
295
g_value_set_string (value, text);
194
299
g_value_set_string (value, _("(loading ...)"));
301
brasero_status_free (status);
198
304
case BRASERO_VIDEO_TREE_MODEL_EDITABLE:
199
305
g_value_init (value, G_TYPE_BOOLEAN);
200
g_value_set_boolean (value, file->editable);
306
/* This can be used for gap lines */
307
g_value_set_boolean (value, TRUE);
308
//g_value_set_boolean (value, file->editable);
311
case BRASERO_VIDEO_TREE_MODEL_SELECTABLE:
312
g_value_init (value, G_TYPE_BOOLEAN);
313
/* This can be used for gap lines */
314
g_value_set_boolean (value, TRUE);
315
//g_value_set_boolean (value, file->editable);
318
case BRASERO_VIDEO_TREE_MODEL_IS_GAP:
319
g_value_init (value, G_TYPE_BOOLEAN);
320
g_value_set_boolean (value, FALSE);
323
case BRASERO_VIDEO_TREE_MODEL_INDEX:
324
tracks = brasero_burn_session_get_tracks (BRASERO_BURN_SESSION (priv->session));
325
g_value_init (value, G_TYPE_STRING);
326
text = g_strdup_printf ("%02i", g_slist_index (tracks, track) + 1);
327
g_value_set_string (value, text);
331
case BRASERO_VIDEO_TREE_MODEL_INDEX_NUM:
332
tracks = brasero_burn_session_get_tracks (BRASERO_BURN_SESSION (priv->session));
333
g_value_init (value, G_TYPE_UINT);
334
g_value_set_uint (value, g_slist_index (tracks, track) + 1);
212
brasero_video_tree_model_file_to_path (BraseroVideoTreeModel *self,
213
BraseroVideoFile *file)
343
brasero_video_tree_model_track_to_path (BraseroVideoTreeModel *self,
344
BraseroTrack *track_arg)
215
346
BraseroVideoTreeModelPrivate *priv;
350
if (!BRASERO_IS_TRACK_STREAM (track_arg))
219
353
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (self);
221
path = gtk_tree_path_new ();
222
nth = brasero_video_project_get_item_index (BRASERO_VIDEO_PROJECT (self), file);
223
gtk_tree_path_prepend_index (path, nth);
355
tracks = brasero_burn_session_get_tracks (BRASERO_BURN_SESSION (priv->session));
356
for (; tracks; tracks = tracks->next) {
357
BraseroTrackStream *track;
359
track = tracks->data;
360
if (track == BRASERO_TRACK_STREAM (track_arg))
365
if (brasero_track_stream_get_gap (track) > 0)
370
return gtk_tree_path_new_from_indices (nth, -1);
228
373
static GtkTreePath *
277
456
GtkTreePath *path)
279
458
BraseroVideoTreeModelPrivate *priv;
280
BraseroVideoFile *file;
281
459
const gint *indices;
284
464
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (model);
286
466
depth = gtk_tree_path_get_depth (path);
468
/* NOTE: it can happen that paths are depth 2 when there is DND but then
469
* only the first index is relevant. */
473
/* Whether it is a GAP or a NORMAL row is of no importance */
290
474
indices = gtk_tree_path_get_indices (path);
291
file = brasero_video_project_get_nth_item (BRASERO_VIDEO_PROJECT (model),
296
iter->user_data = file;
297
iter->stamp = priv->stamp;
476
tracks = brasero_burn_session_get_tracks (BRASERO_BURN_SESSION (priv->session));
477
for (; tracks; tracks = tracks->next) {
478
BraseroTrackStream *track;
480
track = tracks->data;
482
iter->stamp = priv->stamp;
483
iter->user_data2 = GINT_TO_POINTER (BRASERO_STREAM_ROW_NORMAL);
484
iter->user_data = track;
489
if (brasero_track_stream_get_gap (track) > 0) {
491
iter->stamp = priv->stamp;
492
iter->user_data2 = GINT_TO_POINTER (BRASERO_STREAM_ROW_GAP);
493
iter->user_data = track;
503
static BraseroTrack *
504
brasero_video_tree_model_track_next (BraseroVideoTreeModel *model,
507
BraseroVideoTreeModelPrivate *priv;
511
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (model);
513
tracks = brasero_burn_session_get_tracks (BRASERO_BURN_SESSION (priv->session));
514
node = g_slist_find (tracks, track);
515
if (!node || !node->next)
518
return node->next->data;
521
static BraseroTrack *
522
brasero_video_tree_model_track_previous (BraseroVideoTreeModel *model,
525
BraseroVideoTreeModelPrivate *priv;
528
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (model);
530
tracks = brasero_burn_session_get_tracks (BRASERO_BURN_SESSION (priv->session));
531
while (tracks && tracks->next) {
532
if (tracks->next->data == track)
535
tracks = tracks->next;
673
brasero_video_tree_model_move_before (BraseroVideoTreeModel *self,
675
GtkTreePath *dest_before)
679
BraseroTrack *track_sibling;
680
BraseroVideoTreeModelPrivate *priv;
682
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (self);
684
track = BRASERO_TRACK (iter->user_data);
685
if (!dest_before || !brasero_video_tree_model_get_iter (GTK_TREE_MODEL (self), &sibling, dest_before)) {
686
if (GPOINTER_TO_INT (iter->user_data2) == BRASERO_STREAM_ROW_GAP) {
690
gap = brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track));
691
brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track),
695
brasero_track_changed (track);
698
tracks = brasero_burn_session_get_tracks (BRASERO_BURN_SESSION (priv->session));
699
tracks = g_slist_last (tracks);
700
track_sibling = tracks->data;
702
gap += brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track_sibling));
703
brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track_sibling),
707
brasero_track_changed (track_sibling);
711
brasero_burn_session_move_track (BRASERO_BURN_SESSION (priv->session),
717
track_sibling = BRASERO_TRACK (sibling.user_data);
719
if (GPOINTER_TO_INT (iter->user_data2) == BRASERO_STREAM_ROW_GAP) {
721
BraseroTrack *previous_sibling;
723
/* Merge the gaps or add it */
724
gap = brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track));
725
brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track),
729
brasero_track_changed (track);
731
if (GPOINTER_TO_INT (sibling.user_data2) == BRASERO_STREAM_ROW_GAP) {
732
gap += brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track_sibling));
733
brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track_sibling),
737
brasero_track_changed (track_sibling);
741
/* get the track before track_sibling */
742
previous_sibling = brasero_video_tree_model_track_previous (self, track_sibling);
743
if (previous_sibling)
744
track_sibling = previous_sibling;
746
gap += brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track_sibling));
747
brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track_sibling),
751
brasero_track_changed (track_sibling);
755
if (GPOINTER_TO_INT (sibling.user_data2) == BRASERO_STREAM_ROW_GAP) {
759
gap = brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track_sibling));
760
brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track_sibling),
764
brasero_track_changed (track_sibling);
766
gap += brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track));
767
brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track),
771
brasero_track_changed (track);
773
/* Track sibling is now the next track of current track_sibling */
774
track_sibling = brasero_video_tree_model_track_next (self, track_sibling);
777
brasero_burn_session_move_track (BRASERO_BURN_SESSION (priv->session),
402
783
brasero_video_tree_model_drag_data_received (GtkTreeDragDest *drag_dest,
403
784
GtkTreePath *dest_path,
404
785
GtkSelectionData *selection_data)
406
BraseroVideoFile *file;
407
BraseroVideoFile *sibling;
408
BraseroVideoTreeModel *self;
787
BraseroTrack *sibling;
788
BraseroVideoTreeModelPrivate *priv;
410
self = BRASERO_VIDEO_TREE_MODEL (drag_dest);
790
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (drag_dest);
412
792
/* The new row(s) must be before dest_path but after our sibling */
413
sibling = brasero_video_tree_model_path_to_file (BRASERO_VIDEO_TREE_MODEL (drag_dest), dest_path);
793
sibling = brasero_video_tree_model_path_to_track (BRASERO_VIDEO_TREE_MODEL (drag_dest), dest_path);
415
795
/* Received data: see where it comes from:
416
796
* - from us, then that's a simple move
487
brasero_video_tree_model_clear (BraseroVideoTreeModel *self,
872
brasero_video_tree_model_reindex (BraseroVideoTreeModel *model,
873
BraseroBurnSession *session,
874
BraseroTrack *track_arg,
490
GtkTreePath *treepath;
491
879
BraseroVideoTreeModelPrivate *priv;
493
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (self);
495
/* NOTE: no need to move to the next row since previous one was deleted */
496
treepath = gtk_tree_path_new_first ();
497
while (num_files > 0) {
499
gtk_tree_model_row_deleted (GTK_TREE_MODEL (self), treepath);
881
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (model);
883
/* tracks (including) after sibling need to be reindexed */
884
tracks = brasero_burn_session_get_tracks (session);
885
tracks = g_slist_find (tracks, track_arg);
889
tracks = tracks->next;
890
for (; tracks; tracks = tracks->next) {
893
track = tracks->data;
895
iter->stamp = priv->stamp;
896
iter->user_data = track;
897
iter->user_data2 = GINT_TO_POINTER (BRASERO_STREAM_ROW_NORMAL);
899
gtk_tree_path_next (path);
900
gtk_tree_model_row_changed (GTK_TREE_MODEL (model),
905
if (brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track)) > 0)
906
gtk_tree_path_next (path);
501
gtk_tree_path_free (treepath);
505
brasero_video_tree_model_reset (BraseroVideoProject *project,
508
brasero_video_tree_model_clear (BRASERO_VIDEO_TREE_MODEL (project), num_files);
510
/* chain up this function except if we invalidated the file */
511
if (BRASERO_VIDEO_PROJECT_CLASS (brasero_video_tree_model_parent_class)->reset)
512
BRASERO_VIDEO_PROJECT_CLASS (brasero_video_tree_model_parent_class)->reset (project, num_files);
516
brasero_video_tree_model_file_added (BraseroVideoProject *project,
517
BraseroVideoFile *file)
911
brasero_video_tree_model_track_added (BraseroBurnSession *session,
913
BraseroVideoTreeModel *model)
519
915
BraseroVideoTreeModelPrivate *priv;
520
916
GtkTreePath *path;
521
917
GtkTreeIter iter;
523
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (project);
919
if (!BRASERO_IS_TRACK_STREAM (track))
922
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (model);
525
924
iter.stamp = priv->stamp;
526
iter.user_data = file;
925
iter.user_data = track;
926
iter.user_data2 = GINT_TO_POINTER (BRASERO_STREAM_ROW_NORMAL);
528
path = brasero_video_tree_model_file_to_path (BRASERO_VIDEO_TREE_MODEL (project), file);
928
path = brasero_video_tree_model_track_to_path (model, track);
530
930
/* if the file is reloading (because of a file system change or because
531
931
* it was a file that was a tmp folder) then no need to signal an added
532
932
* signal but a changed one */
533
if (file->is_reloading) {
534
gtk_tree_model_row_changed (GTK_TREE_MODEL (project),
537
gtk_tree_path_free (path);
541
/* Add the row itself */
542
gtk_tree_model_row_inserted (GTK_TREE_MODEL (project),
933
gtk_tree_model_row_inserted (GTK_TREE_MODEL (model),
937
if (brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track)) > 0) {
938
priv->gaps = g_slist_prepend (priv->gaps, track);
940
iter.user_data2 = GINT_TO_POINTER (BRASERO_STREAM_ROW_GAP);
941
gtk_tree_path_next (path);
942
gtk_tree_model_row_inserted (GTK_TREE_MODEL (model),
947
/* tracks (including) after sibling need to be reindexed */
948
brasero_video_tree_model_reindex (model, session, track, &iter, path);
545
949
gtk_tree_path_free (path);
548
/* chain up this function */
549
if (BRASERO_VIDEO_PROJECT_CLASS (brasero_video_tree_model_parent_class)->node_added)
550
return BRASERO_VIDEO_PROJECT_CLASS (brasero_video_tree_model_parent_class)->node_added (project,
557
brasero_video_tree_model_file_removed (BraseroVideoProject *project,
558
BraseroVideoFile *file)
953
brasero_video_tree_model_track_removed (BraseroBurnSession *session,
955
guint former_location,
956
BraseroVideoTreeModel *model)
560
958
BraseroVideoTreeModelPrivate *priv;
561
BraseroVideoFile *next;
562
959
GtkTreePath *path;
564
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (project);
962
if (!BRASERO_IS_TRACK_STREAM (track))
965
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (model);
566
967
/* remove the file. */
568
path = brasero_video_tree_model_file_to_path (BRASERO_VIDEO_TREE_MODEL (project), next);
569
gtk_tree_model_row_deleted (GTK_TREE_MODEL (project), path);
968
path = gtk_tree_path_new_from_indices (former_location, -1);
969
gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path);
971
if (brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track)) > 0) {
972
priv->gaps = g_slist_remove (priv->gaps, track);
973
gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path);
976
/* tracks (including) after former_location need to be reindexed */
977
brasero_video_tree_model_reindex (model, session, track, &iter, path);
570
978
gtk_tree_path_free (path);
572
/* chain up this function */
573
if (BRASERO_VIDEO_PROJECT_CLASS (brasero_video_tree_model_parent_class)->node_removed)
574
BRASERO_VIDEO_PROJECT_CLASS (brasero_video_tree_model_parent_class)->node_removed (project,
579
brasero_video_tree_model_file_changed (BraseroVideoProject *project,
580
BraseroVideoFile *file)
982
brasero_video_tree_model_track_changed (BraseroBurnSession *session,
984
BraseroVideoTreeModel *model)
582
986
BraseroVideoTreeModelPrivate *priv;
987
GValue *value = NULL;
583
988
GtkTreePath *path;
584
989
GtkTreeIter iter;
586
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (project);
991
if (!BRASERO_IS_TRACK_STREAM (track))
994
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (model);
996
/* scale the thumbnail */
997
brasero_track_tag_lookup (BRASERO_TRACK (track),
998
BRASERO_TRACK_STREAM_THUMBNAIL_TAG,
1002
GdkPixbuf *snapshot;
1004
snapshot = g_value_get_object (value);
1005
scaled = gdk_pixbuf_scale_simple (snapshot,
1006
48 * gdk_pixbuf_get_width (snapshot) / gdk_pixbuf_get_height (snapshot),
1008
GDK_INTERP_BILINEAR);
1010
value = g_new0 (GValue, 1);
1011
g_value_init (value, GDK_TYPE_PIXBUF);
1012
g_value_set_object (value, scaled);
1013
brasero_track_tag_add (track,
1014
BRASERO_TRACK_STREAM_THUMBNAIL_TAG,
588
1018
/* Get the iter for the file */
589
1019
iter.stamp = priv->stamp;
590
iter.user_data = file;
1020
iter.user_data2 = GINT_TO_POINTER (BRASERO_STREAM_ROW_NORMAL);
1021
iter.user_data = track;
592
path = brasero_video_tree_model_file_to_path (BRASERO_VIDEO_TREE_MODEL (project), file);
593
gtk_tree_model_row_changed (GTK_TREE_MODEL (project),
1023
path = brasero_video_tree_model_track_to_path (model, track);
1024
gtk_tree_model_row_changed (GTK_TREE_MODEL (model),
1028
/* Get the iter for a possible gap row.
1029
* The problem is to know whether one was added, removed or simply
1031
gtk_tree_path_next (path);
1032
if (brasero_track_stream_get_gap (BRASERO_TRACK_STREAM (track)) > 0) {
1033
iter.user_data2 = GINT_TO_POINTER (BRASERO_STREAM_ROW_GAP);
1034
if (!g_slist_find (priv->gaps, track)) {
1035
priv->gaps = g_slist_prepend (priv->gaps, track);
1036
gtk_tree_model_row_inserted (GTK_TREE_MODEL (model),
1041
gtk_tree_model_row_changed (GTK_TREE_MODEL (model),
1045
else if (g_slist_find (priv->gaps, track)) {
1046
priv->gaps = g_slist_remove (priv->gaps, track);
1047
gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path);
596
1050
gtk_tree_path_free (path);
598
/* chain up this function */
599
if (BRASERO_VIDEO_PROJECT_CLASS (brasero_video_tree_model_parent_class)->node_changed)
600
BRASERO_VIDEO_PROJECT_CLASS (brasero_video_tree_model_parent_class)->node_changed (project, file);
1054
brasero_video_tree_model_set_session (BraseroVideoTreeModel *model,
1055
BraseroSessionCfg *session)
1057
BraseroVideoTreeModelPrivate *priv;
1059
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (model);
1060
if (priv->session) {
1061
g_signal_handlers_disconnect_by_func (priv->session,
1062
brasero_video_tree_model_track_added,
1064
g_signal_handlers_disconnect_by_func (priv->session,
1065
brasero_video_tree_model_track_removed,
1067
g_signal_handlers_disconnect_by_func (priv->session,
1068
brasero_video_tree_model_track_changed,
1070
g_object_unref (priv->session);
1071
priv->session = NULL;
1077
priv->session = g_object_ref (session);
1078
g_signal_connect (session,
1080
G_CALLBACK (brasero_video_tree_model_track_added),
1082
g_signal_connect (session,
1084
G_CALLBACK (brasero_video_tree_model_track_removed),
1086
g_signal_connect (session,
1088
G_CALLBACK (brasero_video_tree_model_track_changed),
1093
brasero_video_tree_model_get_session (BraseroVideoTreeModel *model)
1095
BraseroVideoTreeModelPrivate *priv;
1097
priv = BRASERO_VIDEO_TREE_MODEL_PRIVATE (model);
1098
return priv->session;