Author: pollux
Date: 2006-07-30 12:09:37 +0000 (Sun, 30 Jul 2006)
New Revision: 22563

Added:
   xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c
   xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.h
   xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.c
   xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.h
Removed:
   xfburn/trunk/xfburn/xfburn-burn-composition-dialog.c
   xfburn/trunk/xfburn/xfburn-burn-composition-dialog.h
   xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.c
   xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.h
Modified:
   xfburn/trunk/xfburn/Makefile.am
   xfburn/trunk/xfburn/xfburn-data-composition.c
   xfburn/trunk/xfburn/xfburn-main.c
Log:
* rename XfburnBurnCompositionDialog and 
XfburnBurnCompositionProgressDialog into XfburnBurnDataCompositionDialog 
and XfburnBurnDataCompositionProgressDialog (gosh it's long)
* the generated filelist is now mkisofs compliant



Modified: xfburn/trunk/xfburn/Makefile.am
===================================================================
--- xfburn/trunk/xfburn/Makefile.am     2006-07-30 08:31:55 UTC (rev 22562)
+++ xfburn/trunk/xfburn/Makefile.am     2006-07-30 12:09:37 UTC (rev 22563)
@@ -12,8 +12,8 @@
        xfburn-adding-progress.h                                        \
        xfburn-blank-cd-dialog.h                                        \
        xfburn-blank-cd-progress-dialog.h                               \
-       xfburn-burn-composition-dialog.h                                \
-       xfburn-burn-composition-progress-dialog.h                       \
+       xfburn-burn-data-composition-dialog.h                           \
+       xfburn-burn-data-composition-progress-dialog.h                  \
        xfburn-burn-image-dialog.h                                      \
        xfburn-burn-image-progress-dialog.h                             \
        xfburn-settings.h                                               \
@@ -40,8 +40,8 @@
        xfburn-adding-progress.c                                        \
        xfburn-blank-cd-dialog.c                                        \
        xfburn-blank-cd-progress-dialog.c                               \
-       xfburn-burn-composition-dialog.c                                \
-       xfburn-burn-composition-progress-dialog.c                       \
+       xfburn-burn-data-composition-dialog.c                           \
+       xfburn-burn-data-composition-progress-dialog.c                  \
        xfburn-burn-image-dialog.c                                      \
        xfburn-burn-image-progress-dialog.c                             \
        xfburn-composition.c                                            \

Deleted: xfburn/trunk/xfburn/xfburn-burn-composition-dialog.c

Deleted: xfburn/trunk/xfburn/xfburn-burn-composition-dialog.h

Deleted: xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.c

Deleted: xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.h

Copied: xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c (from rev 
22560, xfburn/trunk/xfburn/xfburn-burn-composition-dialog.c)
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c                   
        (rev 0)
+++ xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c   2006-07-30 
12:09:37 UTC (rev 22563)
@@ -0,0 +1,383 @@
+/* $Id$ */
+/*
+ *  Copyright (c) 2005-2006 Jean-François Wauthy ([EMAIL PROTECTED])
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* !HAVE_CONFIG_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-burn-data-composition-dialog.h"
+
+/* 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 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,
+                                XfburnBurnDataCompositionDialogPrivate * priv);
+
+/* structures */
+struct XfburnBurnDataCompositionDialogPrivate
+{
+  gchar *command_iso;
+  gchar *command_burn;
+
+  GtkWidget *combo_device;
+  GtkWidget *combo_speed;
+  GtkWidget *combo_mode;
+
+  GtkWidget *check_eject;
+  GtkWidget *check_burnfree;
+  GtkWidget *check_only_iso;
+  GtkWidget *hbox_iso;
+  GtkWidget *entry_path_iso;
+  GtkWidget *check_dummy;
+
+  gchar *file_list;
+};
+
+/* globals */
+static XfceTitledDialogClass *parent_class = NULL;
+
+GtkType
+xfburn_burn_data_composition_dialog_get_type ()
+{
+  static GtkType type = 0;
+
+  if (type == 0) {
+    static const GTypeInfo our_info = {
+      sizeof (XfburnBurnDataCompositionDialogClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) xfburn_burn_data_composition_dialog_class_init,
+      NULL,
+      NULL,
+      sizeof (XfburnBurnDataCompositionDialog),
+      0,
+      (GInstanceInitFunc) xfburn_burn_data_composition_dialog_init,
+    };
+
+    type = g_type_register_static (XFCE_TYPE_TITLED_DIALOG, 
"XfburnBurnDataCompositionDialog", &our_info, 0);
+  }
+
+  return type;
+}
+
+static void
+xfburn_burn_data_composition_dialog_class_init 
(XfburnBurnDataCompositionDialogClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+  object_class->finalize = xfburn_burn_data_composition_dialog_finalize;
+
+}
+
+static void
+xfburn_burn_data_composition_dialog_init (XfburnBurnDataCompositionDialog * 
obj)
+{
+  XfburnBurnDataCompositionDialogPrivate *priv;
+  GtkBox *box = GTK_BOX (GTK_DIALOG (obj)->vbox);
+  GList *device;
+  GtkWidget *img;
+  GtkWidget *frame;
+  GtkWidget *vbox;
+  GtkWidget *hbox;
+  GtkWidget *align;
+  GtkWidget *label;
+  GtkWidget *button;
+  int i;
+  gchar *default_path;
+  gchar *tmp_dir;
+
+  obj->priv = g_new0 (XfburnBurnDataCompositionDialogPrivate, 1);
+  priv = obj->priv;
+
+  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 */
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox);
+
+  frame = xfce_create_framebox_with_content (_("Burning device"), vbox);
+  gtk_widget_show (frame);
+  gtk_box_pack_start (box, frame, FALSE, FALSE, BORDER);
+
+  priv->combo_device = gtk_combo_box_new_text ();
+  gtk_widget_show (priv->combo_device);
+  gtk_box_pack_start (GTK_BOX (vbox), priv->combo_device, FALSE, FALSE, 
BORDER);
+
+  device = list_devices;
+  while (device) {
+    XfburnDevice *device_data = (XfburnDevice *) device->data;
+
+    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_device), 
device_data->name);
+
+    device = g_list_next (device);
+  }
+  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_device), 0);
+
+  /* speed */
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, BORDER);
+
+  label = gtk_label_new_with_mnemonic (_("_Speed :"));
+  gtk_widget_show (label);
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, BORDER);
+
+  priv->combo_speed = gtk_combo_box_new_text ();
+  gtk_widget_show (priv->combo_speed);
+  gtk_box_pack_start (GTK_BOX (hbox), priv->combo_speed, TRUE, TRUE, BORDER);
+
+  for (i = 2; i <= 52; i += 2) {
+    gchar *str;
+
+    str = g_strdup_printf ("%d", i);
+    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_speed), str);
+    g_free (str);
+  }
+  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_speed), 19);
+
+  img = gtk_image_new_from_stock (GTK_STOCK_REFRESH, 
GTK_ICON_SIZE_SMALL_TOOLBAR);
+  gtk_widget_show (img);
+  button = gtk_button_new ();
+  gtk_container_add (GTK_CONTAINER (button), img);
+  gtk_widget_show (button);
+  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+
+  /* mode */
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox);
+  gtk_box_pack_start (GTK_BOX (vbox), 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 = gtk_combo_box_new_text ();
+  gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), _("default"));
+  gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), "tao");
+  gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), "dao");
+  gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), "raw96p");
+  gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), "raw16");
+  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_mode), 0);
+  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);
+
+  frame = xfce_create_framebox_with_content (_("Options"), vbox);
+  gtk_widget_show (frame);
+  gtk_box_pack_start (box, frame, FALSE, FALSE, BORDER);
+
+  priv->check_eject = gtk_check_button_new_with_mnemonic (_("E_ject disk"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->check_eject), TRUE);
+  gtk_widget_show (priv->check_eject);
+  gtk_box_pack_start (GTK_BOX (vbox), priv->check_eject, FALSE, FALSE, BORDER);
+
+  priv->check_dummy = gtk_check_button_new_with_mnemonic (_("_Dummy write"));
+  gtk_widget_show (priv->check_dummy);
+  gtk_box_pack_start (GTK_BOX (vbox), priv->check_dummy, FALSE, FALSE, BORDER);
+
+  priv->check_burnfree = gtk_check_button_new_with_mnemonic (_("Burn_Free"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->check_burnfree), 
TRUE);
+  gtk_widget_show (priv->check_burnfree);
+  gtk_box_pack_start (GTK_BOX (vbox), priv->check_burnfree, FALSE, FALSE, 
BORDER);
+
+  /* create ISO ? */
+  priv->check_only_iso = gtk_check_button_new_with_mnemonic (_("Only create 
_ISO"));
+  gtk_widget_show (priv->check_only_iso);
+  gtk_box_pack_start (GTK_BOX (vbox), priv->check_only_iso, FALSE, FALSE, 
BORDER);
+  g_signal_connect (G_OBJECT (priv->check_only_iso), "toggled", G_CALLBACK 
(cb_check_only_iso_toggled), obj);
+
+  align = gtk_alignment_new (0, 0, 0, 0);
+  gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, BORDER * 4, 0);
+  gtk_widget_show (align);
+  gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
+
+  priv->hbox_iso = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (priv->hbox_iso);
+  gtk_container_add (GTK_CONTAINER (align), priv->hbox_iso);
+  gtk_widget_set_sensitive (priv->hbox_iso, FALSE);
+
+  priv->entry_path_iso = gtk_entry_new ();
+  tmp_dir = xfburn_settings_get_string ("temporary-dir", "/tmp");
+  default_path = g_build_filename (tmp_dir, "xfburn.iso", NULL);
+  gtk_entry_set_text (GTK_ENTRY (priv->entry_path_iso), default_path);
+  g_free (default_path);
+  g_free (tmp_dir);
+  gtk_widget_show (priv->entry_path_iso);
+  gtk_box_pack_start (GTK_BOX (priv->hbox_iso), priv->entry_path_iso, FALSE, 
FALSE, 0);
+
+  img = gtk_image_new_from_stock (GTK_STOCK_DIRECTORY, 
GTK_ICON_SIZE_SMALL_TOOLBAR);
+  gtk_widget_show (img);
+  button = gtk_button_new ();
+  gtk_container_add (GTK_CONTAINER (button), img);
+  gtk_widget_show (button);
+  gtk_box_pack_start (GTK_BOX (priv->hbox_iso), button, FALSE, FALSE, 0);
+  g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_browse_iso), 
obj);
+
+  /* action buttons */
+  button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+  gtk_widget_show (button);
+  gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_CANCEL);
+
+  button = xfce_create_mixed_button (GTK_STOCK_CDROM, _("_Burn Composition"));
+  gtk_widget_show (button);
+  gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_focus (button);
+  gtk_widget_grab_default (button);
+
+  g_signal_connect (G_OBJECT (obj), "response", G_CALLBACK 
(cb_dialog_response), priv);
+}
+
+static void
+xfburn_burn_data_composition_dialog_finalize (GObject * object)
+{
+  XfburnBurnDataCompositionDialog *cobj;
+  cobj = XFBURN_BURN_COMPOSITION_DIALOG (object);
+
+  g_free (cobj->priv->file_list);
+  g_free (cobj->priv->command_iso);
+  g_free (cobj->priv->command_burn);
+  g_free (cobj->priv);
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/* internals */
+static void
+cb_check_only_iso_toggled (GtkToggleButton * button, 
XfburnBurnDataCompositionDialog * dialog)
+{
+  XfburnBurnDataCompositionDialogPrivate *priv = dialog->priv;
+
+  gtk_widget_set_sensitive (priv->hbox_iso, gtk_toggle_button_get_active 
(button));
+  gtk_widget_set_sensitive (priv->check_eject, !gtk_toggle_button_get_active 
(button));
+  gtk_widget_set_sensitive (priv->check_burnfree, 
!gtk_toggle_button_get_active (button));
+  gtk_widget_set_sensitive (priv->check_dummy, !gtk_toggle_button_get_active 
(button));
+}
+
+static void
+cb_browse_iso (GtkButton * button, XfburnBurnDataCompositionDialog * dialog)
+{
+  xfburn_browse_for_file (GTK_ENTRY (dialog->priv->entry_path_iso), GTK_WINDOW 
(dialog));
+}
+
+static void
+cb_dialog_response (XfburnBurnDataCompositionDialog * dialog, gint 
response_id, XfburnBurnDataCompositionDialogPrivate * priv)
+{
+  if (response_id == GTK_RESPONSE_OK) {
+    gchar *command = NULL;
+    GtkWidget *dialog_progress = NULL;
+    
+    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 -path-list ",
+                             priv->file_list, " > ", gtk_entry_get_text 
(GTK_ENTRY (priv->entry_path_iso)), "\"", NULL);
+
+      dialog_progress = xfburn_create_iso_from_composition_progress_dialog_new 
();
+    }
+    else {
+      gchar *speed;
+      gchar *write_mode;
+      gchar *device_name;
+      XfburnDevice *device;
+      
+      device_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_device));
+      device = xfburn_device_lookup_by_name (device_name);
+      
+      speed = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_speed));
+
+      switch (gtk_combo_box_get_active (GTK_COMBO_BOX (priv->combo_mode))) {
+      case 2:
+        write_mode = g_strdup (" -dao");
+        break;
+      case 3:
+        write_mode = g_strdup (" -raw96p");
+        break;
+      case 4:
+        write_mode = g_strdup (" -raw16");
+        break;
+      case 0:
+      case 1:
+      default:
+        write_mode = g_strdup (" -tao");
+      }
+
+      command = g_strconcat ("sh -c \"mkisofs -gui -graft-points -joliet 
-full-iso9660-filenames -iso-level 2 -path-list ",
+                             priv->file_list, " | cdrecord -v gracetime=2", " 
dev=", device->node_path, write_mode, " speed=", speed,
+                             gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_eject)) ? " -eject" : "",
+                             gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_dummy)) ? " -dummy" : "",
+                             gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_burnfree)) ? " driveropts=burnfree" : "",
+                             " - \"", NULL);
+      g_free (device_name);
+      g_free (speed);
+      g_free (write_mode);
+      dialog_progress = xfburn_burn_data_composition_progress_dialog_new ();
+    }
+
+    gtk_window_set_transient_for (GTK_WINDOW (dialog_progress), 
gtk_window_get_transient_for (GTK_WINDOW (dialog)));
+    gtk_widget_hide (GTK_WIDGET (dialog));
+
+    g_object_set_data (G_OBJECT (dialog_progress), "command", command);
+    gtk_dialog_run (GTK_DIALOG (dialog_progress));
+
+    unlink (priv->file_list);
+    g_free (command);
+  }
+}
+
+/* public */
+gchar *
+xfburn_burn_data_composition_dialog_get_command_iso 
(XfburnBurnDataCompositionDialog * dialog)
+{
+  return g_strdup (dialog->priv->command_iso);
+}
+
+gchar *
+xfburn_burn_data_composition_dialog_get_command_burn 
(XfburnBurnDataCompositionDialog * dialog)
+{
+  return g_strdup (dialog->priv->command_burn);
+}
+
+GtkWidget *
+xfburn_burn_data_composition_dialog_new (const gchar * file_list)
+{
+  XfburnBurnDataCompositionDialog *obj;
+
+  obj = XFBURN_BURN_COMPOSITION_DIALOG (g_object_new 
(XFBURN_TYPE_BURN_COMPOSITION_DIALOG, NULL));
+
+  obj->priv->file_list = g_strdup (file_list);
+
+  return GTK_WIDGET (obj);
+}

Copied: xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.h (from rev 
22560, xfburn/trunk/xfburn/xfburn-burn-composition-dialog.h)
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.h                   
        (rev 0)
+++ xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.h   2006-07-30 
12:09:37 UTC (rev 22563)
@@ -0,0 +1,57 @@
+/* $Id$ */
+/*
+ *  Copyright (c) 2005-2006 Jean-François Wauthy ([EMAIL PROTECTED])
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XFBURN_BURN_COMPOSITION_DIALOG_H__
+#define __XFBURN_BURN_COMPOSITION_DIALOG_H__
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* !HAVE_CONFIG_H */
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define XFBURN_TYPE_BURN_COMPOSITION_DIALOG         
(xfburn_burn_data_composition_dialog_get_type ())
+#define XFBURN_BURN_COMPOSITION_DIALOG(o)           
(G_TYPE_CHECK_INSTANCE_CAST ((o), XFBURN_TYPE_BURN_COMPOSITION_DIALOG, 
XfburnBurnDataCompositionDialog))
+#define XFBURN_BURN_COMPOSITION_DIALOG_CLASS(k)     
(G_TYPE_CHECK_CLASS_CAST((k), XFBURN_TYPE_BURN_COMPOSITION_DIALOG, 
XfburnBurnDataCompositionDialogClass))
+#define XFBURN_IS_BURN_COMPOSITION_DIALOG(o)        
(G_TYPE_CHECK_INSTANCE_TYPE ((o), XFBURN_TYPE_BURN_COMPOSITION_DIALOG))
+#define XFBURN_IS_BURN_COMPOSITION_DIALOG_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE 
((k), XFBURN_TYPE_BURN_COMPOSITION_DIALOG))
+#define XFBURN_BURN_COMPOSITION_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS 
((o), XFBURN_TYPE_BURN_COMPOSITION_DIALOG, 
XfburnBurnDataCompositionDialogClass))
+typedef struct XfburnBurnDataCompositionDialogPrivate 
XfburnBurnDataCompositionDialogPrivate;
+
+typedef struct
+{
+  XfceTitledDialog parent;
+  XfburnBurnDataCompositionDialogPrivate *priv;
+} XfburnBurnDataCompositionDialog;
+
+typedef struct
+{
+  XfceTitledDialogClass parent_class;
+} XfburnBurnDataCompositionDialogClass;
+
+GtkType xfburn_burn_data_composition_dialog_get_type ();
+GtkWidget *xfburn_burn_data_composition_dialog_new (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);
+
+G_END_DECLS
+#endif /* XFBURN_BURN_COMPOSITION_DIALOG_H */

Copied: xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.c 
(from rev 22560, xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.c)
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.c          
                (rev 0)
+++ xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.c  
2006-07-30 12:09:37 UTC (rev 22563)
@@ -0,0 +1,108 @@
+/* $Id$ */
+/*
+ *  Copyright (c) 2005-2006 Jean-François Wauthy ([EMAIL PROTECTED])
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* !HAVE_CONFIG_H */
+
+#include "xfburn-progress-dialog.h"
+
+#include "xfburn-burn-data-composition-progress-dialog.h"
+
+static void xfburn_burn_data_composition_progress_dialog_class_init 
(XfburnBurnDataCompositionProgressDialogClass * klass);
+static void xfburn_burn_data_composition_progress_dialog_init 
(XfburnBurnDataCompositionProgressDialog * sp);
+static void xfburn_burn_data_composition_progress_dialog_finalize (GObject * 
object);
+
+struct XfburnBurnDataCompositionProgressDialogPrivate
+{
+  /* Place Private Members Here */
+};
+
+static XfburnProgressDialogClass *parent_class = NULL;
+
+GtkType
+xfburn_burn_data_composition_progress_dialog_get_type ()
+{
+  static GtkType type = 0;
+
+  if (type == 0) {
+    static const GTypeInfo our_info = {
+      sizeof (XfburnBurnDataCompositionProgressDialogClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) xfburn_burn_data_composition_progress_dialog_class_init,
+      NULL,
+      NULL,
+      sizeof (XfburnBurnDataCompositionProgressDialog),
+      0,
+      (GInstanceInitFunc) xfburn_burn_data_composition_progress_dialog_init,
+    };
+
+    type = g_type_register_static (XFBURN_TYPE_PROGRESS_DIALOG, 
"XfburnBurnDataCompositionProgressDialog", &our_info, 0);
+  }
+
+  return type;
+}
+
+static void
+xfburn_burn_data_composition_progress_dialog_class_init 
(XfburnBurnDataCompositionProgressDialogClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+  object_class->finalize = 
xfburn_burn_data_composition_progress_dialog_finalize;
+
+}
+
+static void
+xfburn_burn_data_composition_progress_dialog_init 
(XfburnBurnDataCompositionProgressDialog * obj)
+{
+  obj->priv = g_new0 (XfburnBurnDataCompositionProgressDialogPrivate, 1);
+  /* Initialize private members, etc. */
+}
+
+static void
+xfburn_burn_data_composition_progress_dialog_finalize (GObject * object)
+{
+  XfburnBurnDataCompositionProgressDialog *cobj;
+  cobj = XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG (object);
+
+  /* Free private members, etc. */
+
+  g_free (cobj->priv);
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/*           */
+/* internals */
+/*           */
+
+/*        */
+/* public */
+/*        */
+
+GtkWidget *
+xfburn_burn_data_composition_progress_dialog_new ()
+{
+  XfburnBurnDataCompositionProgressDialog *obj;
+
+  obj = XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG (g_object_new 
(XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG, NULL));
+
+  return GTK_WIDGET (obj);
+}

Copied: xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.h 
(from rev 22560, xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.h)
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.h          
                (rev 0)
+++ xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.h  
2006-07-30 12:09:37 UTC (rev 22563)
@@ -0,0 +1,55 @@
+/* $Id$ */
+/*
+ *  Copyright (c) 2005-2006 Jean-François Wauthy ([EMAIL PROTECTED])
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG_H__
+#define __XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG_H__
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* !HAVE_CONFIG_H */
+
+#include <gtk/gtk.h>
+
+#include "xfburn-progress-dialog.h"
+
+G_BEGIN_DECLS
+
+#define XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG         
(xfburn_burn_data_composition_progress_dialog_get_type ())
+#define XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG(o)           
(G_TYPE_CHECK_INSTANCE_CAST ((o), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG, 
XfburnBurnDataCompositionProgressDialog))
+#define XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG_CLASS(k)     
(G_TYPE_CHECK_CLASS_CAST((k), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG, 
XfburnBurnDataCompositionProgressDialogClass))
+#define XFBURN_IS_BURN_COMPOSITION_PROGRESS_DIALOG(o)        
(G_TYPE_CHECK_INSTANCE_TYPE ((o), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG))
+#define XFBURN_IS_BURN_COMPOSITION_PROGRESS_DIALOG_CLASS(k)  
(G_TYPE_CHECK_CLASS_TYPE ((k), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG))
+#define XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG_GET_CLASS(o) 
(G_TYPE_INSTANCE_GET_CLASS ((o), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG, 
XfburnBurnDataCompositionProgressDialogClass))
+
+typedef struct XfburnBurnDataCompositionProgressDialogPrivate 
XfburnBurnDataCompositionProgressDialogPrivate;
+
+typedef struct {
+       XfburnProgressDialog parent;
+       XfburnBurnDataCompositionProgressDialogPrivate *priv;
+} XfburnBurnDataCompositionProgressDialog;
+
+typedef struct {
+       XfburnProgressDialogClass parent_class;
+       /* Add Signal Functions Here */
+} XfburnBurnDataCompositionProgressDialogClass;
+
+GtkType xfburn_burn_data_composition_progress_dialog_get_type ();
+GtkWidget *xfburn_burn_data_composition_progress_dialog_new ();
+
+#endif /* XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG_H */

Modified: xfburn/trunk/xfburn/xfburn-data-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-composition.c       2006-07-30 08:31:55 UTC 
(rev 22562)
+++ xfburn/trunk/xfburn/xfburn-data-composition.c       2006-07-30 12:09:37 UTC 
(rev 22563)
@@ -50,7 +50,7 @@
 #endif
 
 #include "xfburn-composition.h"
-#include "xfburn-burn-composition-dialog.h"
+#include "xfburn-burn-data-composition-dialog.h"
 #include "xfburn-disc-usage.h"
 #include "xfburn-main-window.h"
 #include "xfburn-utils.h"
@@ -105,7 +105,7 @@
 {
   DATA_COMPOSITION_TYPE_FILE,
   DATA_COMPOSITION_TYPE_DIRECTORY
-} DataCompositionype;
+} DataCompositionType;
 
 typedef struct
 {
@@ -376,7 +376,7 @@
   
   generate_file_list (XFBURN_DATA_COMPOSITION (dc), &tmpfile);
   
-  dialog = xfburn_burn_composition_dialog_new (tmpfile);
+  dialog = xfburn_burn_data_composition_dialog_new (tmpfile);
   gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (mainwin));
   gtk_dialog_run (GTK_DIALOG (dialog));
   gtk_widget_destroy (dialog);
@@ -940,16 +940,56 @@
   }
 }
 
+static gchar *
+get_composition_path (GtkTreeModel *model, 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;
+}
+
 static gboolean
 foreach_generate_file_list (GtkTreeModel * model, GtkTreePath * path, 
GtkTreeIter * iter, FILE * file)
 {
-  gchar *name;
-  gchar *src;
+  DataCompositionType 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);
 
-  gtk_tree_model_get (model, iter, DATA_COMPOSITION_COLUMN_CONTENT, &name, 
DATA_COMPOSITION_COLUMN_PATH, &src, -1);
+  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);
+  }
 
-  fprintf (file, "%s=%s\n", name, src);
-
+  g_free (dir_path);
   g_free (name);
   g_free (src);
   return FALSE;
@@ -964,7 +1004,9 @@
   FILE *file_tmp;
   int fd_tmpfile;
   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);
@@ -974,9 +1016,14 @@
 
   file_tmp = fdopen (fd_tmpfile, "w+");
   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;
 }
 
@@ -1147,7 +1194,7 @@
   gint i;
   gchar *name = NULL;
   gchar *source_path = NULL;
-  DataCompositionype type;
+  DataCompositionType type;
 
   space = g_strnfill (gtk_tree_path_get_depth (path), '\t');
   

Modified: xfburn/trunk/xfburn/xfburn-main.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-main.c   2006-07-30 08:31:55 UTC (rev 22562)
+++ xfburn/trunk/xfburn/xfburn-main.c   2006-07-30 12:09:37 UTC (rev 22563)
@@ -79,7 +79,7 @@
   mainwin = xfburn_main_window_new ();
 
   gtk_widget_show (mainwin);
-
+  
   gtk_main ();
   
 #ifdef HAVE_THUNAR_VFS

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to