Author: pollux
Date: 2007-01-13 18:18:31 +0000 (Sat, 13 Jan 2007)
New Revision: 24382

Removed:
   
xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-progress-dialog.c
   
xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-progress-dialog.h
   
xfburn/branches/libburn_trial/xfburn/xfburn-create-iso-from-composition-progress-dialog.c
   
xfburn/branches/libburn_trial/xfburn/xfburn-create-iso-from-composition-progress-dialog.h
Modified:
   xfburn/branches/libburn_trial/NEWS
   xfburn/branches/libburn_trial/xfburn/Makefile.am
   xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-dialog.c
   xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-dialog.h
   xfburn/branches/libburn_trial/xfburn/xfburn-data-composition.c
   xfburn/branches/libburn_trial/xfburn/xfburn-data-composition.h
   xfburn/branches/libburn_trial/xfburn/xfburn-data-disc-usage.c
Log:
add support for writing ISO from a composition

Modified: xfburn/branches/libburn_trial/NEWS
===================================================================
--- xfburn/branches/libburn_trial/NEWS  2007-01-13 18:15:10 UTC (rev 24381)
+++ xfburn/branches/libburn_trial/NEWS  2007-01-13 18:18:31 UTC (rev 24382)
@@ -9,6 +9,7 @@
 - Fix icon size in filesystem browser
 - Add icons for actions based on icons from the Tango icontheme
 - Detect supported speeds
+- Add support for writing ISO from a composition
 
 xfburn 0.2.0beta
 ================

Modified: xfburn/branches/libburn_trial/xfburn/Makefile.am
===================================================================
--- xfburn/branches/libburn_trial/xfburn/Makefile.am    2007-01-13 18:15:10 UTC 
(rev 24381)
+++ xfburn/branches/libburn_trial/xfburn/Makefile.am    2007-01-13 18:18:31 UTC 
(rev 24382)
@@ -13,7 +13,6 @@
        xfburn-adding-progress.h                                        \
        xfburn-blank-cd-dialog.h                                        \
        xfburn-burn-data-composition-dialog.h                           \
-       xfburn-burn-data-composition-progress-dialog.h                  \
        xfburn-burn-image-dialog.h                                      \
        xfburn-settings.h                                               \
        xfburn-composition.h                                            \
@@ -22,7 +21,6 @@
        xfburn-copy-cd-progress-dialog.h                                \
        xfburn-copy-dvd-dialog.h                                        \
        xfburn-create-iso-progress-dialog.h                             \
-       xfburn-create-iso-from-composition-progress-dialog.h            \
        xfburn-device-box.h                                             \
        xfburn-device-list.h                                            \
        xfburn-format-dvd-dialog.h                                      \
@@ -42,6 +40,7 @@
        $(xfburn_headers)                                               \
        xfburn-adding-progress.c                                        \
        xfburn-blank-cd-dialog.c                                        \
+       xfburn-burn-data-composition-dialog.c                           \
        xfburn-burn-image-dialog.c                                      \
        xfburn-composition.c                                            \
        xfburn-compositions-notebook.c                                  \

Modified: 
xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-dialog.c
===================================================================
--- xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-dialog.c  
2007-01-13 18:15:10 UTC (rev 24381)
+++ xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-dialog.c  
2007-01-13 18:18:31 UTC (rev 24382)
@@ -21,22 +21,25 @@
 #include <config.h>
 #endif /* !HAVE_CONFIG_H */
 
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <errno.h>
+
 #include "xfburn-global.h"
 #include "xfburn-utils.h"
 #include "xfburn-settings.h"
-#include "xfburn-burn-data-composition-progress-dialog.h"
-#include "xfburn-create-iso-from-composition-progress-dialog.h"
+
 #include "xfburn-device-box.h"
-#include "xfburn-write-mode-combo-box.h"
-
 #include "xfburn-burn-data-composition-dialog.h"
+#include "xfburn-progress-dialog.h"
 
 #define XFBURN_BURN_DATA_COMPOSITION_DIALOG_GET_PRIVATE(obj) 
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_BURN_DATA_COMPOSITION_DIALOG, 
XfburnBurnDataCompositionDialogPrivate))
 
 typedef struct
 {
-  gchar *command_iso;
-  gchar *command_burn;
+  struct iso_volset * volume_set;
 
   GtkWidget *frame_device;
   GtkWidget *device_box;
@@ -48,16 +51,21 @@
   GtkWidget *hbox_iso;
   GtkWidget *entry_path_iso;
   GtkWidget *check_dummy;
-
-  gchar *file_list;
-  XfburnDataComposition *composition;
 } XfburnBurnDataCompositionDialogPrivate;
 
+enum {
+  PROP_0,
+  PROP_VOLUME_SET,
+};
+
 /* prototypes */
 static void xfburn_burn_data_composition_dialog_class_init 
(XfburnBurnDataCompositionDialogClass * klass);
 static void xfburn_burn_data_composition_dialog_init 
(XfburnBurnDataCompositionDialog * obj);
 static void xfburn_burn_data_composition_dialog_finalize (GObject * object);
 
+static void xfburn_burn_data_composition_dialog_get_property (GObject * 
object, guint prop_id, GValue * value, GParamSpec * pspec);
+static void xfburn_burn_data_composition_dialog_set_property (GObject * 
object, guint prop_id, const GValue * value, GParamSpec * pspec);
+
 static void cb_check_only_iso_toggled (GtkToggleButton * button, 
XfburnBurnDataCompositionDialog * dialog);
 static void cb_browse_iso (GtkButton * button, XfburnBurnDataCompositionDialog 
* dialog);
 static void cb_dialog_response (XfburnBurnDataCompositionDialog * dialog, gint 
response_id,
@@ -99,6 +107,12 @@
   g_type_class_add_private (klass, sizeof 
(XfburnBurnDataCompositionDialogPrivate));
   
   object_class->finalize = xfburn_burn_data_composition_dialog_finalize;
+  object_class->get_property = 
xfburn_burn_data_composition_dialog_get_property;
+  object_class->set_property = 
xfburn_burn_data_composition_dialog_set_property;
+
+  /* properties */
+  g_object_class_install_property (object_class, PROP_VOLUME_SET,
+                                  g_param_spec_pointer ("volume-set", "Volume 
Set", "Volume Set", G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
 }
 
 static void
@@ -110,41 +124,23 @@
   GtkWidget *img;
   GtkWidget *frame;
   GtkWidget *vbox;
-  GtkWidget *hbox;
   GtkWidget *align;
-  GtkWidget *label;
   GtkWidget *button;
   gchar *default_path;
   gchar *tmp_dir;
 
-  priv->command_iso = NULL;
-  priv->command_burn = NULL;
-
   gtk_window_set_title (GTK_WINDOW (obj), _("Burn Composition"));
   gtk_window_set_destroy_with_parent (GTK_WINDOW (obj), TRUE);
   gtk_window_set_icon_name (GTK_WINDOW (obj), GTK_STOCK_CDROM);
 
   /* burning devices list */
-  priv->device_box = xfburn_device_box_new (TRUE, TRUE);
+  priv->device_box = xfburn_device_box_new (TRUE, TRUE, TRUE);
   gtk_widget_show (priv->device_box);
 
   priv->frame_device = xfce_create_framebox_with_content (_("Burning device"), 
priv->device_box);
   gtk_widget_show (priv->frame_device);
   gtk_box_pack_start (box, priv->frame_device, FALSE, FALSE, BORDER);
 
-  /* mode */
-  hbox = gtk_hbox_new (FALSE, 0);
-  gtk_widget_show (hbox);
-  gtk_box_pack_start (GTK_BOX (priv->device_box), hbox, FALSE, FALSE, BORDER);
-
-  label = gtk_label_new_with_mnemonic (_("Write _mode :"));
-  gtk_widget_show (label);
-  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, BORDER);
-
-  priv->combo_mode = xfburn_write_mode_combo_box_new ();
-  gtk_box_pack_start (GTK_BOX (hbox), priv->combo_mode, TRUE, TRUE, BORDER);
-  gtk_widget_show (priv->combo_mode);
-
   /* options */
   vbox = gtk_vbox_new (FALSE, 0);
   gtk_widget_show (vbox);
@@ -216,13 +212,41 @@
 }
 
 static void
+xfburn_burn_data_composition_dialog_get_property (GObject * object, guint 
prop_id, GValue * value, GParamSpec * pspec)
+{
+  XfburnBurnDataCompositionDialogPrivate *priv = 
XFBURN_BURN_DATA_COMPOSITION_DIALOG_GET_PRIVATE (object);
+
+  switch (prop_id) {
+  case PROP_VOLUME_SET:
+    g_value_set_pointer (value, priv->volume_set);
+    break;
+  default:
+    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    break;
+  }
+}
+
+static void
+xfburn_burn_data_composition_dialog_set_property (GObject * object, guint 
prop_id, const GValue * value, GParamSpec * pspec)
+{
+  XfburnBurnDataCompositionDialogPrivate *priv = 
XFBURN_BURN_DATA_COMPOSITION_DIALOG_GET_PRIVATE (object);
+
+  switch (prop_id) {
+  case PROP_VOLUME_SET:
+    priv->volume_set = g_value_get_pointer (value);
+    break;
+  default:
+    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    break;
+  }
+}
+
+static void
 xfburn_burn_data_composition_dialog_finalize (GObject * object)
 {
   XfburnBurnDataCompositionDialogPrivate *priv = 
XFBURN_BURN_DATA_COMPOSITION_DIALOG_GET_PRIVATE (object);
 
-  g_free (priv->file_list);
-  g_free (priv->command_iso);
-  g_free (priv->command_burn);
+  iso_volset_free (priv->volume_set);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -249,25 +273,101 @@
   xfburn_browse_for_file (GTK_ENTRY (priv->entry_path_iso), GTK_WINDOW 
(dialog));
 }
 
+typedef struct {
+  GtkWidget *dialog_progress;
+  struct burn_source *src;
+  gchar *iso_path;
+} ThreadWriteIsoParams;
+
 static void
+thread_write_iso (ThreadWriteIsoParams * params)
+{
+  GtkWidget *dialog_progress = params->dialog_progress;
+  FILE *fd = NULL;
+  guchar buf[2048];
+  glong size = 0;
+  glong written = 0;
+
+  fd = fopen(params->iso_path, "w");
+  if (fd == NULL) {
+    /* could not create destination */
+    gchar err[256];
+    gchar *error_msg = NULL;
+
+    strerror_r (errno, err, 256);
+
+    error_msg = g_strdup_printf (_("Could not create destination ISO file: 
%s"), err);
+    xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG 
(dialog_progress), error_msg);
+    g_free (error_msg);
+
+    goto end;
+  }
+
+  xfburn_progress_dialog_set_status_with_text (XFBURN_PROGRESS_DIALOG 
(dialog_progress), XFBURN_PROGRESS_DIALOG_STATUS_RUNNING, _("Writing ISO..."));
+
+  size = (glong) params->src->get_size (params->src);
+  while (params->src->read (params->src, buf, 2048) == 2048) {
+    if ( (fwrite(buf, 1, 2048, fd) < 2048) && (ferror (fd) > 0)) {
+      /* an error occured while writing */
+      gchar err[256];
+      gchar *error_msg = NULL;
+      
+      strerror_r (errno, err, 256);
+    
+      error_msg = g_strdup_printf (_("An error occured while writing ISO: 
%s"), err);
+      xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG 
(dialog_progress), error_msg);
+      g_free (error_msg);
+      goto cleanup;
+    } else {
+      gdouble percent =0;
+
+      written += 2048;
+      percent = ((gdouble) written / (gdouble) size);
+
+      xfburn_progress_dialog_set_progress_bar_fraction (XFBURN_PROGRESS_DIALOG 
(dialog_progress), percent);
+    }
+  }
+  xfburn_progress_dialog_set_status_with_text (XFBURN_PROGRESS_DIALOG 
(dialog_progress), XFBURN_PROGRESS_DIALOG_STATUS_COMPLETED, _("Done"));
+
+ cleanup:
+  fclose (fd);
+ end:
+  burn_source_free (params->src);
+  g_free (params->iso_path);
+  g_free (params);
+}
+
+static void
 cb_dialog_response (XfburnBurnDataCompositionDialog * dialog, gint 
response_id, XfburnBurnDataCompositionDialogPrivate * priv)
 {
-  gchar *dummy_dir = NULL;
-  
   if (response_id == GTK_RESPONSE_OK) {
-    gchar *volid = NULL;
-    gchar *command = NULL;
-    GtkWidget *dialog_progress = NULL;
-  
-    volid = xfburn_data_composition_get_volume_id (priv->composition);
-    
+    GtkWidget *dialog_progress;
+    ThreadWriteIsoParams *params;
+
     if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_only_iso))) {
-      command = g_strconcat ("sh -c \"mkisofs -gui -graft-points -joliet 
-full-iso9660-filenames -iso-level 2 -volid '",
-                             volid, "' -path-list ", priv->file_list, " > ", 
gtk_entry_get_text (GTK_ENTRY (priv->entry_path_iso)), "\"", NULL);
+      /* create a new iso */
+      struct burn_source * src = iso_source_new_ecma119 (priv->volume_set, 0, 
2, ECMA119_JOLIET);
+      if (src == NULL) {
+       /* could not create source */
+       xfce_err (_("Could not create ISO source structure"));
+       return;
+      }
 
-      dialog_progress = xfburn_create_iso_from_composition_progress_dialog_new 
();
+      dialog_progress = xfburn_progress_dialog_new (GTK_WINDOW (dialog));
+      gtk_window_set_transient_for (GTK_WINDOW (dialog_progress), 
gtk_window_get_transient_for (GTK_WINDOW (dialog)));
+      gtk_widget_hide (GTK_WIDGET (dialog));
+      
+      gtk_widget_show (dialog_progress);
+
+      params = g_new0 (ThreadWriteIsoParams, 1);
+      params->dialog_progress = dialog_progress;
+      params->src = src;
+      params->iso_path = g_strdup (gtk_entry_get_text (GTK_ENTRY 
(priv->entry_path_iso)));
+      g_thread_create ((GThreadFunc) thread_write_iso, params, FALSE, NULL);
     }
     else {
+      xfce_info ("Coming soon");
+      /*
       gchar *speed = NULL;
       gchar *write_mode = NULL;
       XfburnDevice *device;
@@ -298,45 +398,18 @@
     
     g_free (command);
     g_free (volid);
+      */
+    }
   }
-  
-  unlink (priv->file_list);
-  dummy_dir = xfburn_data_composition_get_dummy_dir (priv->composition);
-  if (dummy_dir) {
-    rmdir (dummy_dir);
-  }
 }
 
 /* public */
-gchar *
-xfburn_burn_data_composition_dialog_get_command_iso 
(XfburnBurnDataCompositionDialog * dialog)
-{
-  XfburnBurnDataCompositionDialogPrivate *priv = 
XFBURN_BURN_DATA_COMPOSITION_DIALOG_GET_PRIVATE (dialog);
-  
-  return g_strdup (priv->command_iso);
-}
-
-gchar *
-xfburn_burn_data_composition_dialog_get_command_burn 
(XfburnBurnDataCompositionDialog * dialog)
-{
-  XfburnBurnDataCompositionDialogPrivate *priv = 
XFBURN_BURN_DATA_COMPOSITION_DIALOG_GET_PRIVATE (dialog);
-  
-  return g_strdup (priv->command_burn);
-}
-
 GtkWidget *
-xfburn_burn_data_composition_dialog_new (XfburnDataComposition *composition, 
const gchar * file_list)
+xfburn_burn_data_composition_dialog_new (struct iso_volset * volume_set)
 {
   XfburnBurnDataCompositionDialog *obj;
 
-  obj = XFBURN_BURN_DATA_COMPOSITION_DIALOG (g_object_new 
(XFBURN_TYPE_BURN_DATA_COMPOSITION_DIALOG, NULL));
-
-  if (obj) {
-    XfburnBurnDataCompositionDialogPrivate *priv = 
XFBURN_BURN_DATA_COMPOSITION_DIALOG_GET_PRIVATE (obj);
-    
-    priv->file_list = g_strdup (file_list);
-    priv->composition = composition;
-  }
+  obj = XFBURN_BURN_DATA_COMPOSITION_DIALOG (g_object_new 
(XFBURN_TYPE_BURN_DATA_COMPOSITION_DIALOG, "volume-set", volume_set, NULL));
   
   return GTK_WIDGET (obj);
 }

Modified: 
xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-dialog.h
===================================================================
--- xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-dialog.h  
2007-01-13 18:15:10 UTC (rev 24381)
+++ xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-dialog.h  
2007-01-13 18:18:31 UTC (rev 24382)
@@ -27,7 +27,7 @@
 #include <gtk/gtk.h>
 #include <libxfcegui4/libxfcegui4.h>
 
-#include "xfburn-data-composition.h"
+#include <libisofs/libisofs.h>
 
 G_BEGIN_DECLS
 
@@ -49,10 +49,8 @@
 } XfburnBurnDataCompositionDialogClass;
 
 GtkType xfburn_burn_data_composition_dialog_get_type ();
-GtkWidget *xfburn_burn_data_composition_dialog_new (XfburnDataComposition 
*composition, const gchar *file_list);
 
-gchar *xfburn_burn_data_composition_dialog_get_command_iso 
(XfburnBurnDataCompositionDialog *dialog);
-gchar *xfburn_burn_data_composition_dialog_get_command_burn 
(XfburnBurnDataCompositionDialog *dialog);
+GtkWidget *xfburn_burn_data_composition_dialog_new (struct iso_volset * 
volume_set);
 
 G_END_DECLS
 #endif /* XFBURN_BURN_DATA_COMPOSITION_DIALOG_H */

Deleted: 
xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-progress-dialog.c

Deleted: 
xfburn/branches/libburn_trial/xfburn/xfburn-burn-data-composition-progress-dialog.h

Deleted: 
xfburn/branches/libburn_trial/xfburn/xfburn-create-iso-from-composition-progress-dialog.c

Deleted: 
xfburn/branches/libburn_trial/xfburn/xfburn-create-iso-from-composition-progress-dialog.h

Modified: xfburn/branches/libburn_trial/xfburn/xfburn-data-composition.c
===================================================================
--- xfburn/branches/libburn_trial/xfburn/xfburn-data-composition.c      
2007-01-13 18:15:10 UTC (rev 24381)
+++ xfburn/branches/libburn_trial/xfburn/xfburn-data-composition.c      
2007-01-13 18:18:31 UTC (rev 24382)
@@ -43,6 +43,8 @@
 
 #include <exo/exo.h>
 
+#include <libisofs/libisofs.h>
+
 #include "xfburn-data-composition.h"
 
 #if 0
@@ -92,7 +94,7 @@
                                             GtkTreeViewDropPosition position);
 static gboolean add_file_to_list (XfburnDataComposition * dc, GtkTreeModel * 
model, const gchar * path, GtkTreeIter * iter,
                                   GtkTreeIter * insertion, 
GtkTreeViewDropPosition position);
-static gboolean generate_file_list (XfburnDataComposition * dc, gchar ** 
tmpfile);
+static struct iso_volume * generate_iso_volume (XfburnDataComposition * dc);
                                   
 enum
 {
@@ -412,20 +414,16 @@
 static void
 cb_begin_burn (XfburnDataDiscUsage * du, XfburnDataComposition * dc)
 {
-  /*
   XfburnMainWindow *mainwin = xfburn_main_window_get_instance ();
   GtkWidget *dialog;
-  gchar *tmpfile = NULL;
+  struct iso_volume *volume = NULL;
+
+  volume = generate_iso_volume (XFBURN_DATA_COMPOSITION (dc));
   
-  generate_file_list (XFBURN_DATA_COMPOSITION (dc), &tmpfile);
-  
-  dialog = xfburn_burn_data_composition_dialog_new (dc, tmpfile);
+  dialog = xfburn_burn_data_composition_dialog_new (iso_volset_new(volume, 
"VOLSETID"));
   gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (mainwin));
   gtk_dialog_run (GTK_DIALOG (dialog));
   gtk_widget_destroy (dialog);
-
-  g_free (tmpfile);
-  */
 }
 
 static void
@@ -932,7 +930,6 @@
     XfburnMainWindow *mainwin;
     GtkUIManager *ui_manager;
     GtkActionGroup *action_group;
-    GtkAction *action;
   
     mainwin = xfburn_main_window_get_instance ();
     ui_manager = xfburn_main_window_get_ui_manager (mainwin);
@@ -1428,94 +1425,55 @@
   }
 }
 
-static gchar *
-get_composition_path (GtkTreeModel *model, GtkTreeIter *iter)
+static void
+fill_volume_with_composition (GtkTreeModel *model, struct iso_tree_node * 
parent, GtkTreeIter *iter)
 {
-  GtkTreeIter parent;
-  GtkTreeIter current = *iter;
-  gchar *path = g_strdup ("");
-  gchar *temp = NULL;
-  
-  while (gtk_tree_model_iter_parent (model, &parent, &current)) {
-    gchar *name = NULL;
-    
-    gtk_tree_model_get (model, &parent, DATA_COMPOSITION_COLUMN_CONTENT, 
&name, -1);
-    
-    temp = g_strdup_printf ("%s/%s", name, path);
-    g_free (path);
-    path = temp;
-    
-    g_free (name);
-    
-    current = parent;
-  } 
-  
-  return path;
-}
+  GtkTreeIter child;
+  if (!gtk_tree_model_iter_children (model, &child, iter))
+    return;
 
-static gboolean
-foreach_generate_file_list (GtkTreeModel * model, GtkTreePath * path, 
GtkTreeIter * iter, FILE * file)
-{
-  DataCompositionEntryType type;
-  gchar *dir_path = NULL;
-  gchar *name = NULL;
-  gchar *src = NULL;
-  
-  gtk_tree_model_get (model, iter, DATA_COMPOSITION_COLUMN_TYPE, &type,
-                      DATA_COMPOSITION_COLUMN_CONTENT, &name, 
DATA_COMPOSITION_COLUMN_PATH, &src, -1);
+  do {
+      DataCompositionEntryType type;
+      gchar *name = NULL;
+      gchar *src = NULL;
+      
+      struct iso_tree_node *node = NULL;
 
-  dir_path = get_composition_path (model, iter);
-  
-  fprintf (file, "%s%s=", dir_path, name);
-  
-  if (type == DATA_COMPOSITION_TYPE_DIRECTORY) {
-    gchar *dummy_dir = NULL;
-    
-    dummy_dir = g_object_get_data (G_OBJECT (model), "dummy-dir");    
-    fprintf (file, "%s\n", dummy_dir);
-  } else {
-    fprintf (file, "%s\n", src);
-  }
+      gtk_tree_model_get (model, &child, DATA_COMPOSITION_COLUMN_TYPE, &type,
+                         DATA_COMPOSITION_COLUMN_CONTENT, &name, 
DATA_COMPOSITION_COLUMN_PATH, &src, -1);
 
-  g_free (dir_path);
-  g_free (name);
-  g_free (src);
-  return FALSE;
+      if (type == DATA_COMPOSITION_TYPE_DIRECTORY) {
+       node = iso_tree_add_new_dir (parent, name);
+      } else {
+       node = iso_tree_add_node (parent, src);
+       iso_tree_node_set_name (node, name);
+      }
+      g_free (name);
+      g_free (src);
+
+      if (type == DATA_COMPOSITION_TYPE_DIRECTORY && 
gtk_tree_model_iter_has_child (model, &child))
+       fill_volume_with_composition (model, node, &child);
+  } while (gtk_tree_model_iter_next (model, &child));
 }
 
-static gboolean
-generate_file_list (XfburnDataComposition * dc, gchar ** tmpfile)
+static struct iso_volume *
+generate_iso_volume (XfburnDataComposition * dc)
 {
   XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE 
(dc);
-  
-  GError *error = NULL;
-  FILE *file_tmp;
-  int fd_tmpfile;
+  struct iso_volume *volume = NULL;
   GtkTreeModel *model;
-  gchar *dummy_dir = NULL;
-  gchar template[] = "/tmp/xfburnXXXXXX";
-  
-  fd_tmpfile = g_file_open_tmp ("xfburnXXXXXX", tmpfile, &error);
-  if (error) {
-    g_warning ("Unable to create temporary file: %s", error->message);
-    g_error_free (error);
-    return FALSE;
-  }
+  GtkTreeIter iter;
 
-  file_tmp = fdopen (fd_tmpfile, "w+");
+  volume = iso_volume_new (gtk_entry_get_text (GTK_ENTRY 
(priv->entry_volume_name)), "Xfburn", "Xfburn");
+
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content));
-  
-  
-  dummy_dir = mkdtemp (template);
-  g_object_set_data (G_OBJECT (model), "dummy-dir", dummy_dir);
-  
-  gtk_tree_model_foreach (model, (GtkTreeModelForeachFunc) 
foreach_generate_file_list, file_tmp);
-  fclose (file_tmp);
-  
-  return TRUE;
+  if (gtk_tree_model_get_iter_first (model, &iter)) {
+    fill_volume_with_composition (model, iso_volume_get_root (volume), &iter);
+  }
+
+  return volume;
 }
 
-
 /****************/
 /* loading code */
 /****************/
@@ -1787,21 +1745,3 @@
   gtk_widget_show (priv->toolbar);
 }
 
-gchar *
-xfburn_data_composition_get_dummy_dir (XfburnDataComposition * composition)
-{
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE 
(composition);
-  GtkTreeModel *model;
-  
-  model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content));
-  
-  return g_object_get_data (G_OBJECT (model), "dummy-dir");
-}
-
-gchar *
-xfburn_data_composition_get_volume_id (XfburnDataComposition * composition)
-{
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE 
(composition);
-  
-  return g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->entry_volume_name)));
-}

Modified: xfburn/branches/libburn_trial/xfburn/xfburn-data-composition.h
===================================================================
--- xfburn/branches/libburn_trial/xfburn/xfburn-data-composition.h      
2007-01-13 18:15:10 UTC (rev 24381)
+++ xfburn/branches/libburn_trial/xfburn/xfburn-data-composition.h      
2007-01-13 18:18:31 UTC (rev 24382)
@@ -57,8 +57,5 @@
 void xfburn_data_composition_hide_toolbar (XfburnDataComposition *content);
 void xfburn_data_composition_show_toolbar (XfburnDataComposition *content);
 
-gchar * xfburn_data_composition_get_dummy_dir (XfburnDataComposition * 
composition);
-gchar * xfburn_data_composition_get_volume_id (XfburnDataComposition * 
composition);
-
 G_END_DECLS
 #endif

Modified: xfburn/branches/libburn_trial/xfburn/xfburn-data-disc-usage.c
===================================================================
--- xfburn/branches/libburn_trial/xfburn/xfburn-data-disc-usage.c       
2007-01-13 18:15:10 UTC (rev 24381)
+++ xfburn/branches/libburn_trial/xfburn/xfburn-data-disc-usage.c       
2007-01-13 18:18:31 UTC (rev 24382)
@@ -126,7 +126,7 @@
   gtk_box_pack_start (GTK_BOX (disc_usage), disc_usage->combo, FALSE, FALSE, 
BORDER);
   gtk_widget_show (disc_usage->combo);
 
-  disc_usage->button = xfce_create_mixed_button (GTK_STOCK_CDROM, _("Burn 
composition"));
+  disc_usage->button = xfce_create_mixed_button ("xfburn-burn-cd", _("Burn 
composition"));
   gtk_box_pack_start (GTK_BOX (disc_usage), disc_usage->button, FALSE, FALSE, 
BORDER);
   gtk_widget_set_sensitive (disc_usage->button, FALSE);
   gtk_widget_show (disc_usage->button);

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to