brasero r1748 - in trunk: . libbrasero-media nautilus src src/plugins/libburnia
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r1748 - in trunk: . libbrasero-media nautilus src src/plugins/libburnia
- Date: Wed, 14 Jan 2009 15:44:38 +0000 (UTC)
Author: philippr
Date: Wed Jan 14 15:44:38 2009
New Revision: 1748
URL: http://svn.gnome.org/viewvc/brasero?rev=1748&view=rev
Log:
2009-01-14 Philippe Rouquier <bonfire-app wanadoo fr>
Lots of update in one patch to address issues raised during discussion on ML
Nautilus extension:
- use libbrasero-media
- add an icon to the button
- make it modal to nautilus
Brasero:
Fix and respect parenting from commandline xid
Fix a warning and a title incorrectly set for video projects
Fixed a unknown symbol for libisofs
Fixed a recursive signal leading to crash in burn-session.c
Libbrasero-media:
Some more documentation
Added some compile information to be available for apps linking against it
(version, install path)
Rewrote brasero-drive-selection because of licencing issues
Simplified signals for brasero-medium-selection
For both widgets now, signal and properties match
Misc:
Fix bogus name (ykw) for licencing
Fix a crash when removing the GConf key for a plugin
* configure.in:
* libbrasero-media/brasero-drive-selection.c
(brasero_drive_selection_set_current_drive),
(brasero_drive_selection_changed),
(brasero_drive_selection_set_active),
(brasero_drive_selection_get_active),
(brasero_drive_selection_update_no_disc_entry),
(brasero_drive_selection_add_no_disc_entry),
(brasero_drive_selection_show_type),
(brasero_drive_selection_drive_added_cb),
(brasero_drive_selection_drive_removed_cb),
(brasero_drive_selection_init), (brasero_drive_selection_finalize),
(brasero_drive_selection_set_property),
(brasero_drive_selection_get_property),
(brasero_drive_selection_class_init),
(brasero_drive_selection_new):
* libbrasero-media/brasero-drive-selection.h:
* libbrasero-media/brasero-drive.c:
* libbrasero-media/brasero-media-private.h:
* libbrasero-media/brasero-media.c:
* libbrasero-media/brasero-media.h:
* libbrasero-media/brasero-media.h.in:
* libbrasero-media/brasero-medium-monitor.h:
* libbrasero-media/brasero-medium-selection.c
(brasero_medium_selection_set_current_medium),
(brasero_medium_selection_changed),
(brasero_medium_selection_set_active),
(brasero_medium_selection_get_active),
(brasero_medium_selection_update_no_disc_entry),
(brasero_medium_selection_show_media_type),
(brasero_medium_selection_medium_added_cb),
(brasero_medium_selection_medium_removed_cb),
(brasero_medium_selection_class_init):
* libbrasero-media/brasero-medium-selection.h:
* libbrasero-media/brasero-medium.c (brasero_medium_get_tooltip):
* libbrasero-media/brasero-volume.h:
* nautilus/Makefile.am:
* nautilus/nautilus-burn-bar.c (nautilus_disc_burn_bar_init):
* nautilus/nautilus-burn-extension.c (launch_process),
(launch_brasero_on_window), (write_iso_activate_cb),
(copy_disc_activate_cb), (blank_disc_activate_cb),
(check_disc_activate_cb), (volume_is_blank), (drive_is_cd_device),
(nautilus_module_initialize), (nautilus_module_shutdown):
* src/brasero-app.c (brasero_app_current_toplevel_destroyed),
(brasero_app_set_toplevel), (brasero_app_run_mainwin):
* src/brasero-burn-options.c (brasero_burn_options_init):
* src/brasero-dest-selection.c
(brasero_dest_selection_medium_changed),
(brasero_dest_selection_class_init):
* src/brasero-disc.c (brasero_disc_get_use_info_notebook):
* src/brasero-project.c (brasero_project_set_uri):
* src/brasero-src-selection.c
(brasero_src_selection_medium_changed),
(brasero_src_selection_set_property),
(brasero_src_selection_class_init):
* src/brasero-tool-dialog.c (brasero_tool_dialog_init):
* src/burn-plugin.c (brasero_plugin_priority_changed):
* src/burn-session.c (brasero_burn_session_set_input_type):
* src/plugins/libburnia/burn-libisofs.c
(brasero_libisofs_create_volume_thread):
Added:
trunk/libbrasero-media/brasero-media.h.in
- copied, changed from r1747, /trunk/libbrasero-media/brasero-media.h
Removed:
trunk/libbrasero-media/brasero-media.h
Modified:
trunk/ChangeLog
trunk/configure.in
trunk/libbrasero-media/brasero-drive-selection.c
trunk/libbrasero-media/brasero-drive-selection.h
trunk/libbrasero-media/brasero-drive.c
trunk/libbrasero-media/brasero-media-private.h
trunk/libbrasero-media/brasero-media.c
trunk/libbrasero-media/brasero-medium-monitor.h
trunk/libbrasero-media/brasero-medium-selection.c
trunk/libbrasero-media/brasero-medium-selection.h
trunk/libbrasero-media/brasero-medium.c
trunk/libbrasero-media/brasero-volume.h
trunk/nautilus/Makefile.am
trunk/nautilus/nautilus-burn-bar.c
trunk/nautilus/nautilus-burn-extension.c
trunk/src/brasero-app.c
trunk/src/brasero-burn-options.c
trunk/src/brasero-dest-selection.c
trunk/src/brasero-disc.c
trunk/src/brasero-project.c
trunk/src/brasero-src-selection.c
trunk/src/brasero-tool-dialog.c
trunk/src/burn-plugin.c
trunk/src/burn-session.c
trunk/src/plugins/libburnia/burn-libisofs.c
Modified: trunk/configure.in
==============================================================================
--- trunk/configure.in (original)
+++ trunk/configure.in Wed Jan 14 15:44:38 2009
@@ -20,7 +20,7 @@
AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)
-LIBBRASERO_LT_VERSION=0:0:0
+LIBBRASERO_LT_VERSION=$LT_CURRENT:$LT_REVISION:$LT_AGE
AC_SUBST(LIBBRASERO_LT_VERSION)
AC_DEFINE_UNQUOTED(BRASERO_MAJOR_VERSION, $BRASERO_MAJOR_VERSION, [major version])
@@ -420,6 +420,7 @@
help/Makefile
nautilus/Makefile
libbrasero-media/Makefile
+libbrasero-media/brasero-media.h
src/plugins/Makefile
src/plugins/cdrdao/Makefile
src/plugins/cdrkit/Makefile
Modified: trunk/libbrasero-media/brasero-drive-selection.c
==============================================================================
--- trunk/libbrasero-media/brasero-drive-selection.c (original)
+++ trunk/libbrasero-media/brasero-drive-selection.c Wed Jan 14 15:44:38 2009
@@ -1,524 +1,640 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * brasero-drive-selection.c
- *
- * Copyright (C) 2002-2004 Bastien Nocera <hadess hadess net>
- * Copyright (C) 2005-2006 William Jon McCann <mccann jhu edu>
- * Copyright (C) 2009 Philippe Rouquier <bonfire-app wanadoo fr>
- *
- * 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 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.
- *
- * Authors: Bastien Nocera <hadess hadess net>
- * William Jon McCann <mccann jhu edu>
- *
- */
-
-#include "config.h"
-
-#include <string.h>
-
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * brasero
+ * Copyright (C) Philippe Rouquier 2005-2008 <bonfire-app wanadoo fr>
+ *
+ * Brasero 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.
+ *
+ * brasero 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with brasero. If not, write to:
+ * The Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <glib.h>
-#include <glib/gi18n.h>
+#include <glib-object.h>
+#include <glib/gi18n-lib.h>
+
#include <gtk/gtk.h>
-
-#include "brasero-medium-monitor.h"
+
#include "brasero-drive-selection.h"
-
-/* Signals */
-enum {
- DRIVE_CHANGED,
- LAST_SIGNAL
+#include "brasero-medium-monitor.h"
+#include "brasero-drive.h"
+#include "brasero-units.h"
+
+typedef struct _BraseroDriveSelectionPrivate BraseroDriveSelectionPrivate;
+struct _BraseroDriveSelectionPrivate
+{
+ BraseroDrive *active;
+
+ BraseroDriveType type;
+ gulong added_sig;
+ gulong removed_sig;
};
+
+#define BRASERO_DRIVE_SELECTION_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_DRIVE_SELECTION, BraseroDriveSelectionPrivate))
-/* Arguments */
-enum {
- PROP_0,
- PROP_DRIVE,
- PROP_DRIVE_TYPE,
- PROP_RECORDERS_ONLY,
-};
+typedef enum {
+ CHANGED_SIGNAL,
+ LAST_SIGNAL
+} BraseroDriveSelectionSignalType;
+
+static guint brasero_drive_selection_signals [LAST_SIGNAL] = { 0 };
enum {
- DISPLAY_NAME_COLUMN,
- DRIVE_COLUMN,
- N_COLUMNS
+ PROP_0,
+ PROP_DRIVE,
+ PROP_DRIVE_TYPE
};
-
-#define BRASERO_DRIVE_SELECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_DRIVE_SELECTION, BraseroDriveSelectionPrivate))
-
-typedef struct BraseroDriveSelectionPrivate BraseroDriveSelectionPrivate;
-
-struct BraseroDriveSelectionPrivate {
- BraseroMediumMonitor *monitor;
-
- BraseroDrive *selected_drive;
- BraseroDriveType type;
+
+enum {
+ DRIVE_COL,
+ NAME_COL,
+ ICON_COL,
+ NUM_COL
};
-
-#define BRASERO_DRIVE_SELECTION_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_DRIVE_SELECTION, BraseroDriveSelectionPrivate))
-
-static void brasero_drive_selection_init (BraseroDriveSelection *selection);
-
-static void brasero_drive_selection_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec);
-static void brasero_drive_selection_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec);
-
-static void brasero_drive_selection_finalize (GObject *object);
-
-static int brasero_drive_selection_table_signals [LAST_SIGNAL] = { 0 };
-
+
G_DEFINE_TYPE (BraseroDriveSelection, brasero_drive_selection, GTK_TYPE_COMBO_BOX);
-
-static void
-brasero_drive_selection_class_init (BraseroDriveSelectionClass *klass)
-{
- GObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = (GObjectClass *) klass;
- widget_class = (GtkWidgetClass *) klass;
-
- /* GObject */
- object_class->set_property = brasero_drive_selection_set_property;
- object_class->get_property = brasero_drive_selection_get_property;
- object_class->finalize = brasero_drive_selection_finalize;
-
- g_type_class_add_private (klass, sizeof (BraseroDriveSelectionPrivate));
-
- /* Properties */
- g_object_class_install_property (object_class, PROP_DRIVE,
- g_param_spec_object ("drive",
- _("Drive"),
- "The drive currently selected",
- BRASERO_TYPE_DRIVE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_DRIVE_TYPE,
- g_param_spec_uint ("drive-type",
- "Drive type",
- "The drive types used to filter",
- 0, 255, BRASERO_DRIVE_TYPE_ALL_BUT_FILE,
- G_PARAM_READWRITE));
-
- /**
- * BraseroDriveSelection::drive_changed:
- * @selection: the object which received the signal
- * @drive: the new drive which is selected
- *
- * This signal gets emitted when the selected drive has changed
- *
- */
- brasero_drive_selection_table_signals [DRIVE_CHANGED] =
- g_signal_new ("drive_changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (BraseroDriveSelectionClass,
- drive_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- BRASERO_TYPE_DRIVE);
-}
-
-static void
-brasero_drive_selection_set_drive_internal (BraseroDriveSelection *selection,
- BraseroDrive *drive)
-{
- BraseroDriveSelectionPrivate *priv;
-
- priv = BRASERO_DRIVE_SELECTION_PRIVATE (selection);
- priv->selected_drive = g_object_ref (drive);
-
- g_signal_emit (G_OBJECT (selection),
- brasero_drive_selection_table_signals [DRIVE_CHANGED],
- 0, drive);
-
- g_object_notify (G_OBJECT (selection), "drive");
-}
-
-static void
-combo_changed (GtkComboBox *combo,
- BraseroDriveSelection *selection)
-{
- BraseroDrive *drive;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- if (! gtk_combo_box_get_active_iter (GTK_COMBO_BOX (selection), &iter)) {
- return;
- }
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (selection));
- gtk_tree_model_get (model, &iter, DRIVE_COLUMN, &drive, -1);
-
- if (drive == NULL) {
- return;
- }
-
- brasero_drive_selection_set_drive_internal (selection, drive);
-}
-
+
+
static void
-selection_update_sensitivity (BraseroDriveSelection *selection)
+brasero_drive_selection_set_current_drive (BraseroDriveSelection *self,
+ GtkTreeIter *iter)
{
- GtkTreeModel *model;
- int num_drives;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (selection));
- num_drives = gtk_tree_model_iter_n_children (model, NULL);
-
- gtk_widget_set_sensitive (GTK_WIDGET (selection), (num_drives > 0));
+ BraseroDriveSelectionPrivate *priv;
+ BraseroDrive *drive;
+ GtkTreeModel *model;
+
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (self);
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (self));
+ gtk_tree_model_get (model, iter,
+ DRIVE_COL, &drive,
+ -1);
+
+ if (priv->active == drive)
+ return;
+
+ if (priv->active)
+ g_object_unref (priv->active);
+
+ priv->active = drive;
+
+ if (priv->active) {
+ gtk_widget_set_sensitive (GTK_WIDGET (self), TRUE);
+ g_object_ref (priv->active);
+ }
+ else
+ gtk_widget_set_sensitive (GTK_WIDGET (self), FALSE);
+
+ g_signal_emit (self,
+ brasero_drive_selection_signals [CHANGED_SIGNAL],
+ 0,
+ priv->active);
+}
+
+static void
+brasero_drive_selection_changed (GtkComboBox *combo)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ model = gtk_combo_box_get_model (combo);
+ if (!gtk_combo_box_get_active_iter (combo, &iter))
+ return;
+
+ brasero_drive_selection_set_current_drive (BRASERO_DRIVE_SELECTION (combo), &iter);
}
+
+/**
+ * brasero_drive_selection_set_active:
+ * @selector: a #BraseroDriveSelection
+ * @drive: a #BraseroDrive to set as the active one in the selector
+ *
+ * Sets the active drive. Emits the ::drive-changed signal.
+ *
+ * Return value: a #gboolean. TRUE if it succeeded, FALSE otherwise.
+ **/
+gboolean
+brasero_drive_selection_set_active (BraseroDriveSelection *selector,
+ BraseroDrive *drive)
+{
+ BraseroDriveSelectionPrivate *priv;
+ gboolean result = FALSE;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ g_return_val_if_fail (selector != NULL, FALSE);
+ g_return_val_if_fail (BRASERO_IS_DRIVE_SELECTION (selector), FALSE);
+
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (selector);
+
+ if (priv->active == drive)
+ return TRUE;
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (selector));
+ if (!gtk_tree_model_get_iter_first (model, &iter))
+ return FALSE;
+
+ do {
+ BraseroDrive *iter_drive;
+
+ gtk_tree_model_get (model, &iter,
+ DRIVE_COL, &iter_drive,
+ -1);
+
+ if (drive == iter_drive) {
+ if (iter_drive)
+ g_object_unref (iter_drive);
+
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (selector), &iter);
+ brasero_drive_selection_set_current_drive (selector, &iter);
+ result = TRUE;
+ break;
+ }
-static gboolean
-get_iter_for_drive (BraseroDriveSelection *selection,
- BraseroDrive *drive,
- GtkTreeIter *iter)
-{
- GtkTreeModel *model;
- gboolean found;
-
- found = FALSE;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (selection));
- if (! gtk_tree_model_get_iter_first (model, iter)) {
- goto out;
- }
-
- do {
- BraseroDrive *drive2;
-
- gtk_tree_model_get (model, iter, DRIVE_COLUMN, &drive2, -1);
-
- if (drive == drive2) {
- found = TRUE;
- break;
- }
-
- } while (gtk_tree_model_iter_next (model, iter));
- out:
- return found;
-}
-
-static void
-selection_append_drive (BraseroDriveSelection *selection,
- BraseroDrive *drive)
-{
- char *display_name;
- GtkTreeIter iter;
- GtkTreeModel *model;
-
- display_name = brasero_drive_get_display_name (drive);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (selection));
- gtk_list_store_append (GTK_LIST_STORE (model), &iter);
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- DISPLAY_NAME_COLUMN, display_name ? display_name : _("Unnamed CD/DVD Drive"),
- DRIVE_COLUMN, drive,
- -1);
-
- g_free (display_name);
-}
-
-static void
-selection_remove_drive (BraseroDriveSelection *selection,
- BraseroDrive *drive)
-{
- gboolean found;
- GtkTreeIter iter;
- GtkTreeModel *model;
- BraseroDriveSelectionPrivate *priv;
-
- priv = BRASERO_DRIVE_SELECTION_PRIVATE (selection);
- found = get_iter_for_drive (selection, drive, &iter);
- if (! found) {
- return;
- }
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (selection));
- gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
-
- if (priv->selected_drive != NULL
- && (drive == priv->selected_drive)) {
- if (gtk_tree_model_get_iter_first (model, &iter)) {
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (selection), &iter);
- }
- }
-}
-
-static void
-populate_model (BraseroDriveSelection *selection,
- GtkListStore *store)
-{
- GSList *drives;
- BraseroDrive *drive;
- BraseroMediumMonitor *monitor;
- BraseroDriveSelectionPrivate *priv;
-
- priv = BRASERO_DRIVE_SELECTION_PRIVATE (selection);
- monitor = brasero_medium_monitor_get_default ();
- drives = brasero_medium_monitor_get_drives (monitor, priv->type);
- while (drives != NULL) {
- drive = drives->data;
-
- selection_append_drive (selection, drive);
-
- if (drive != NULL) {
- g_object_unref (drive);
- }
- drives = g_slist_delete_link (drives, drives);
- }
+ g_object_unref (iter_drive);
+ } while (gtk_tree_model_iter_next (model, &iter));
- gtk_combo_box_set_active (GTK_COMBO_BOX (selection), 0);
+ return result;
}
-
-static void
-drive_connected_cb (BraseroMediumMonitor *monitor,
- BraseroDrive *drive,
- BraseroDriveSelection *selection)
+
+/**
+ * brasero_drive_selection_get_active:
+ * @selector: a #BraseroDriveSelection
+ *
+ * Gets the active drive.
+ *
+ * Return value: a #BraseroDrive or NULL. Unref when it is not needed anymore.
+ **/
+BraseroDrive *
+brasero_drive_selection_get_active (BraseroDriveSelection *selector)
{
- selection_append_drive (selection, drive);
+ BraseroDriveSelectionPrivate *priv;
- selection_update_sensitivity (selection);
-}
+ g_return_val_if_fail (selector != NULL, NULL);
+ g_return_val_if_fail (BRASERO_IS_DRIVE_SELECTION (selector), NULL);
-static void
-drive_disconnected_cb (BraseroMediumMonitor *monitor,
- BraseroDrive *drive,
- BraseroDriveSelection *selection)
-{
- selection_remove_drive (selection, drive);
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (selector);
+ if (!priv->active)
+ return NULL;
- selection_update_sensitivity (selection);
+ return g_object_ref (priv->active);
}
static void
-brasero_drive_selection_init (BraseroDriveSelection *selection)
+brasero_drive_selection_update_no_disc_entry (BraseroDriveSelection *self,
+ GtkTreeModel *model,
+ GtkTreeIter *iter)
{
- GtkCellRenderer *cell;
- GtkListStore *store;
- BraseroDriveSelectionPrivate *priv;
-
- priv = BRASERO_DRIVE_SELECTION_PRIVATE (selection);
-
- priv->monitor = brasero_medium_monitor_get_default ();
-
- g_signal_connect (priv->monitor, "drive-added", G_CALLBACK (drive_connected_cb), selection);
- g_signal_connect (priv->monitor, "drive-removed", G_CALLBACK (drive_disconnected_cb), selection);
-
- store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, BRASERO_TYPE_DRIVE);
- gtk_combo_box_set_model (GTK_COMBO_BOX (selection),
- GTK_TREE_MODEL (store));
-
- cell = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (selection), cell, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (selection), cell,
- "text", DISPLAY_NAME_COLUMN,
- NULL);
+ GIcon *icon;
- priv->type = BRASERO_DRIVE_TYPE_ALL_BUT_FILE;
- populate_model (selection, store);
+ icon = g_themed_icon_new_with_default_fallbacks ("drive-optical");
- selection_update_sensitivity (selection);
+ /* FIXME: that needs a string */
+ gtk_list_store_set (GTK_LIST_STORE (model), iter,
+ NAME_COL, NULL,
+ ICON_COL, NULL,
+ -1);
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (combo_changed), selection);
+ g_object_unref (icon);
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self), iter);
+ brasero_drive_selection_set_current_drive (self, iter);
}
-
+
static void
-brasero_drive_selection_finalize (GObject *object)
+brasero_drive_selection_add_no_disc_entry (BraseroDriveSelection *self)
{
- BraseroDriveSelection *selection = (BraseroDriveSelection *) object;
- BraseroDriveSelectionPrivate *priv;
-
- g_return_if_fail (selection != NULL);
- g_return_if_fail (BRASERO_IS_DRIVE_SELECTION (selection));
-
- priv = BRASERO_DRIVE_SELECTION_PRIVATE (selection);
-
- g_signal_handlers_disconnect_by_func (priv->monitor, G_CALLBACK (drive_connected_cb), selection);
- g_signal_handlers_disconnect_by_func (priv->monitor, G_CALLBACK (drive_disconnected_cb), selection);
-
- if (priv->selected_drive != NULL) {
- g_object_unref (priv->selected_drive);
- }
-
- if (G_OBJECT_CLASS (brasero_drive_selection_parent_class)->finalize != NULL) {
- (* G_OBJECT_CLASS (brasero_drive_selection_parent_class)->finalize) (object);
- }
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ BraseroDriveSelectionPrivate *priv;
+
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (self);
+
+ /* Nothing's available. Say it. Two cases here, either we're
+ * still probing drives or there isn't actually any available
+ * drive. */
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (self));
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ brasero_drive_selection_update_no_disc_entry (self, model, &iter);
}
-
+
/**
- * brasero_drive_selection_new:
- *
- * Create a new drive selector.
+ * brasero_drive_selection_show_type:
+ * @selector: a #BraseroDriveSelection
+ * @type: a #BraseroDriveType
*
- * Return value: Newly allocated #BraseroDriveSelection widget
+ * Filters and displays drive corresponding to @type.
*
**/
-GtkWidget *
-brasero_drive_selection_new (void)
-{
- GtkWidget *widget;
-
- widget = GTK_WIDGET
- (g_object_new (BRASERO_TYPE_DRIVE_SELECTION, NULL));
-
- return widget;
-}
-
-static void
-repopulate_model (BraseroDriveSelection *selection)
-{
- GtkTreeModel *model;
-
- /* block the combo changed signal handler until we're done */
- g_signal_handlers_block_by_func (G_OBJECT (selection),
- combo_changed, selection);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (selection));
- gtk_list_store_clear (GTK_LIST_STORE (model));
- populate_model (selection, GTK_LIST_STORE (model));
-
- g_signal_handlers_unblock_by_func (G_OBJECT (selection),
- combo_changed, selection);
-
- /* Force a signal out */
- combo_changed (GTK_COMBO_BOX (selection), (gpointer) selection);
-}
-
void
-brasero_drive_selection_show_type (BraseroDriveSelection *selection,
- BraseroDriveType type)
+brasero_drive_selection_show_type (BraseroDriveSelection *selector,
+ BraseroDriveType type)
{
- BraseroDriveSelectionPrivate *priv;
-
- g_return_if_fail (selection != NULL);
- g_return_if_fail (BRASERO_IS_DRIVE_SELECTION (selection));
-
- priv = BRASERO_DRIVE_SELECTION_PRIVATE (selection);
- priv->type = type;
-
- repopulate_model (selection);
- selection_update_sensitivity (selection);
+ BraseroDriveSelectionPrivate *priv;
+ BraseroMediumMonitor *monitor;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GSList *list;
+ GSList *item;
+
+ g_return_if_fail (selector != NULL);
+ g_return_if_fail (BRASERO_IS_DRIVE_SELECTION (selector));
+
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (selector);
+
+ priv->type = type;
+
+ monitor = brasero_medium_monitor_get_default ();
+ list = brasero_medium_monitor_get_drives (monitor, type);
+ g_object_unref (monitor);
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (selector));
+ if (gtk_tree_model_get_iter_first (model, &iter)) {
+ /* First filter */
+ do {
+ GSList *node;
+ BraseroDrive *drive;
+
+ gtk_tree_model_get (model, &iter,
+ DRIVE_COL, &drive,
+ -1);
+
+ if (!drive) {
+ /* That's the dummy line saying there isn't any
+ * available drive for whatever action it is */
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ break;
+ }
+
+ node = g_slist_find (list, drive);
+ g_object_unref (drive);
+
+ if (!node) {
+ if (gtk_list_store_remove (GTK_LIST_STORE (model), &iter))
+ continue;
+
+ /* no more iter in the tree get out */
+ break;
+ }
+
+ g_object_unref (node->data);
+ list = g_slist_delete_link (list, node);
+ } while (gtk_tree_model_iter_next (model, &iter));
+ }
+
+ if (list) {
+ /* add remaining drive */
+ for (item = list; item; item = item->next) {
+ gchar *drive_name;
+ BraseroDrive *drive;
+ GIcon *drive_icon = NULL;
+
+ drive = item->data;
+
+ drive_name = brasero_drive_get_display_name (drive);
+
+ if (!brasero_drive_is_fake (drive)) {
+ GDrive *gdrive;
+
+ gdrive = brasero_drive_get_gdrive (drive);
+ if (gdrive) {
+ drive_icon = g_drive_get_icon (gdrive);
+ g_object_unref (gdrive);
+ }
+ else
+ drive_icon = g_themed_icon_new_with_default_fallbacks ("drive-optical");
+ }
+ else
+ drive_icon = g_themed_icon_new_with_default_fallbacks ("iso-image-new");
+
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ DRIVE_COL, drive,
+ NAME_COL, drive_name?drive_name:_("Unnamed CD/DVD Drive"),
+ ICON_COL, drive_icon,
+ -1);
+ g_free (drive_name);
+ }
+ g_slist_foreach (list, (GFunc) g_object_unref, NULL);
+ g_slist_free (list);
+ }
+
+ if (!gtk_tree_model_get_iter_first (model, &iter)) {
+ brasero_drive_selection_add_no_disc_entry (selector);
+ return;
+ }
+
+ gtk_widget_set_sensitive (GTK_WIDGET (selector), TRUE);
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (selector)) == -1) {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (selector), &iter);
+ brasero_drive_selection_set_current_drive (selector, &iter);
+ }
+}
+
+static void
+brasero_drive_selection_drive_added_cb (BraseroMediumMonitor *monitor,
+ BraseroDrive *drive,
+ BraseroDriveSelection *self)
+{
+ BraseroDriveSelectionPrivate *priv;
+ gboolean add = FALSE;
+ GtkTreeModel *model;
+ gchar *drive_name;
+ GIcon *drive_icon;
+ GtkTreeIter iter;
+
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (self);
+
+ if ((priv->type & BRASERO_DRIVE_TYPE_WRITER)
+ && (brasero_drive_can_write (drive)))
+ add = TRUE;
+ else if (priv->type & BRASERO_DRIVE_TYPE_READER)
+ add = TRUE;
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (self));
+
+ if (!add) {
+ /* Try to get the first iter (it shouldn't fail) */
+ if (!gtk_tree_model_get_iter_first (model, &iter)) {
+ brasero_drive_selection_add_no_disc_entry (self);
+ return;
+ }
+
+ /* See if that's a real drive or not; if so, return. */
+ drive = NULL;
+ gtk_tree_model_get (model, &iter,
+ DRIVE_COL, &drive,
+ -1);
+ if (drive)
+ return;
+
+ brasero_drive_selection_update_no_disc_entry (self, model, &iter);
+ return;
+ }
+
+ /* remove warning message */
+ if (gtk_tree_model_get_iter_first (model, &iter)) {
+ BraseroDrive *tmp;
+
+ gtk_tree_model_get (model, &iter,
+ DRIVE_COL, &tmp,
+ -1);
+ if (!tmp)
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ else
+ g_object_unref (tmp);
+ }
+
+ if (!brasero_drive_is_fake (drive)) {
+ GDrive *gdrive;
+
+ gdrive = brasero_drive_get_gdrive (drive);
+ if (gdrive) {
+ drive_icon = g_drive_get_icon (gdrive);
+ g_object_unref (gdrive);
+ }
+ else
+ drive_icon = g_themed_icon_new_with_default_fallbacks ("drive-optical");
+ }
+ else
+ drive_icon = g_themed_icon_new_with_default_fallbacks ("iso-image-new");
+
+ drive_name = brasero_drive_get_display_name (drive);
+
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ DRIVE_COL, drive,
+ NAME_COL, drive_name?drive_name:_("Unnamed CD/DVD Drive"),
+ ICON_COL, drive_icon,
+ -1);
+ g_free (drive_name);
+
+ gtk_widget_set_sensitive (GTK_WIDGET (self), TRUE);
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (self)) == -1) {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self), &iter);
+ brasero_drive_selection_set_current_drive (self, &iter);
+ }
+}
+
+static void
+brasero_drive_selection_drive_removed_cb (BraseroMediumMonitor *monitor,
+ BraseroDrive *drive,
+ BraseroDriveSelection *self)
+ {
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (self));
+ if (!gtk_tree_model_get_iter_first (model, &iter))
+ return;
+
+ do {
+ BraseroDrive *iter_drive;
+
+ gtk_tree_model_get (model, &iter,
+ DRIVE_COL, &iter_drive,
+ -1);
+
+ if (drive == iter_drive) {
+ g_object_unref (iter_drive);
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ break;
+ }
+
+ /* Could be NULL if a message "there is no drive ..." is on */
+ if (iter_drive)
+ g_object_unref (iter_drive);
+
+ } while (gtk_tree_model_iter_next (model, &iter));
+
+ if (!gtk_tree_model_get_iter_first (model, &iter)) {
+ brasero_drive_selection_add_no_disc_entry (self);
+ return;
+ }
+
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (self)) == -1) {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self), &iter);
+ brasero_drive_selection_set_current_drive (self, &iter);
+ }
+}
+
+static void
+brasero_drive_selection_init (BraseroDriveSelection *object)
+{
+ GtkListStore *model;
+ GtkCellRenderer *renderer;
+ BraseroMediumMonitor *monitor;
+ BraseroDriveSelectionPrivate *priv;
+
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (object);
+
+ monitor = brasero_medium_monitor_get_default ();
+ priv->added_sig = g_signal_connect (monitor,
+ "drive-added",
+ G_CALLBACK (brasero_drive_selection_drive_added_cb),
+ object);
+ priv->removed_sig = g_signal_connect (monitor,
+ "drive-removed",
+ G_CALLBACK (brasero_drive_selection_drive_removed_cb),
+ object);
+
+ g_object_unref (monitor);
+
+ /* get the list and fill the model */
+ model = gtk_list_store_new (NUM_COL,
+ G_TYPE_OBJECT,
+ G_TYPE_STRING,
+ G_TYPE_ICON);
+
+ gtk_combo_box_set_model (GTK_COMBO_BOX (object), GTK_TREE_MODEL (model));
+ g_object_unref (model);
+
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ g_object_set (renderer, "follow-state", TRUE, NULL);
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, FALSE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer,
+ "gicon", ICON_COL,
+ NULL);
+
+ renderer = gtk_cell_renderer_text_new ();
+ g_object_set (renderer, "xpad", 8, NULL);
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer,
+ "markup", NAME_COL,
+ NULL);
+
+ brasero_drive_selection_show_type (BRASERO_DRIVE_SELECTION (object),
+ BRASERO_DRIVE_TYPE_ALL_BUT_FILE);
+
}
-
+
static void
-brasero_drive_selection_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
+brasero_drive_selection_finalize (GObject *object)
{
- BraseroDriveSelection *selection;
-
- g_return_if_fail (BRASERO_IS_DRIVE_SELECTION (object));
-
- selection = BRASERO_DRIVE_SELECTION (object);
-
- switch (property_id) {
- case PROP_DRIVE:
- brasero_drive_selection_set_active (selection, g_value_get_object (value));
- break;
- case PROP_DRIVE_TYPE:
- brasero_drive_selection_show_type (selection, g_value_get_uint (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
+ BraseroDriveSelectionPrivate *priv;
+ BraseroMediumMonitor *monitor;
+
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (object);
+
+ monitor = brasero_medium_monitor_get_default ();
+
+ g_signal_handler_disconnect (monitor, priv->added_sig);
+ g_signal_handler_disconnect (monitor, priv->removed_sig);
+ priv->removed_sig = 0;
+ priv->added_sig = 0;
+
+ g_object_unref (monitor);
+
+ G_OBJECT_CLASS (brasero_drive_selection_parent_class)->finalize (object);
+ }
+
+static void
+brasero_drive_selection_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ BraseroDriveSelectionPrivate *priv;
+
+ g_return_if_fail (BRASERO_IS_DRIVE_SELECTION (object));
+
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (object);
+
+ switch (prop_id)
+ {
+ case PROP_DRIVE_TYPE:
+ brasero_drive_selection_show_type (BRASERO_DRIVE_SELECTION (object),
+ g_value_get_uint (value));
+ break;
+ case PROP_DRIVE:
+ brasero_drive_selection_set_active (BRASERO_DRIVE_SELECTION (object),
+ BRASERO_DRIVE (g_value_get_object (value)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ }
+
+static void
+brasero_drive_selection_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ BraseroDriveSelectionPrivate *priv;
+
+ g_return_if_fail (BRASERO_IS_DRIVE_SELECTION (object));
+
+ priv = BRASERO_DRIVE_SELECTION_PRIVATE (object);
+
+ switch (prop_id)
+ {
+ case PROP_DRIVE_TYPE:
+ g_value_set_uint (value, priv->type);
+ break;
+ case PROP_DRIVE:
+ g_value_set_object (value, brasero_drive_selection_get_active (BRASERO_DRIVE_SELECTION (object)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
-
+
static void
-brasero_drive_selection_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- BraseroDriveSelectionPrivate *priv;
-
- g_return_if_fail (BRASERO_IS_DRIVE_SELECTION (object));
-
- priv = BRASERO_DRIVE_SELECTION_PRIVATE (object);
-
- switch (property_id) {
- case PROP_DRIVE:
- g_value_set_object (value, priv->selected_drive);
- break;
- case PROP_DRIVE_TYPE:
- g_value_set_uint (value, priv->type);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-/**
- * brasero_drive_selection_set_active:
- * @selection: #BraseroDriveSelection
- * @drive: #BraseroDrive
- *
- * Set the current selected drive to that which corresponds to the
- * specified drive.
- *
- **/
-void
-brasero_drive_selection_set_active (BraseroDriveSelection *selection,
- BraseroDrive *drive)
+brasero_drive_selection_class_init (BraseroDriveSelectionClass *klass)
{
- GtkTreeIter iter;
- gboolean found;
-
- g_return_if_fail (selection != NULL);
- g_return_if_fail (BRASERO_IS_DRIVE_SELECTION (selection));
-
- found = get_iter_for_drive (selection, drive, &iter);
- if (! found) {
- return;
- }
-
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (selection), &iter);
+ GObjectClass* object_class = G_OBJECT_CLASS (klass);
+ GtkComboBoxClass *combo_class = GTK_COMBO_BOX_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (BraseroDriveSelectionPrivate));
+
+ object_class->finalize = brasero_drive_selection_finalize;
+ object_class->set_property = brasero_drive_selection_set_property;
+ object_class->get_property = brasero_drive_selection_get_property;
+
+ combo_class->changed = brasero_drive_selection_changed;
+
+ g_object_class_install_property (object_class, PROP_DRIVE,
+ g_param_spec_object (_("drive"), NULL, NULL,
+ BRASERO_TYPE_DRIVE, G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_DRIVE_TYPE,
+ g_param_spec_uint ("drive-type", NULL, NULL,
+ 0, BRASERO_DRIVE_TYPE_ALL,
+ BRASERO_DRIVE_TYPE_ALL_BUT_FILE,
+ G_PARAM_READWRITE));
+ brasero_drive_selection_signals [CHANGED_SIGNAL] =
+ g_signal_new ("drive_changed",
+ BRASERO_TYPE_DRIVE_SELECTION,
+ G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION|G_SIGNAL_NO_RECURSE,
+ G_STRUCT_OFFSET (BraseroDriveSelectionClass, drive_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1,
+ BRASERO_TYPE_DRIVE);
}
-
-/**
- * brasero_drive_selection_get_active:
- * @selection: #BraseroDriveSelection
- *
- * Get the currently selected drive
- *
- * Return value: currently selected #BraseroDrive. The drive must be
- * unreffed using nautilus_burn_drive_unref after use.
- *
- **/
-BraseroDrive *
-brasero_drive_selection_get_active (BraseroDriveSelection *selection)
+
+GtkWidget *
+brasero_drive_selection_new (void)
{
- BraseroDriveSelectionPrivate *priv;
-
- g_return_val_if_fail (selection != NULL, NULL);
- g_return_val_if_fail (BRASERO_IS_DRIVE_SELECTION (selection), NULL);
-
- priv = BRASERO_DRIVE_SELECTION_PRIVATE (selection);
- if (priv->selected_drive != NULL) {
- g_object_ref (priv->selected_drive);
- }
-
- return priv->selected_drive;
+ return g_object_new (BRASERO_TYPE_DRIVE_SELECTION, NULL);
}
-
Modified: trunk/libbrasero-media/brasero-drive-selection.h
==============================================================================
--- trunk/libbrasero-media/brasero-drive-selection.h (original)
+++ trunk/libbrasero-media/brasero-drive-selection.h Wed Jan 14 15:44:38 2009
@@ -1,66 +1,74 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * brasero-drive-selection.h
- *
- * Copyright (C) 2002-2004 Bastien Nocera <hadess hadess net>
- * Copyright (C) 2005-2006 William Jon McCann <mccann jhu edu>
- * Copyright (C) 2009 Philippe Rouquier <bonfire-app wanadoo fr>
- *
- * 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,
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * brasero
+ * Copyright (C) Philippe Rouquier 2005-2008 <bonfire-app wanadoo fr>
+ *
+ * Brasero 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.
+ *
+ * brasero 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 General Public License for more details.
- *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU 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.
- *
- * Authors: Bastien Nocera <hadess hadess net>
- * William Jon McCann <mccann jhu edu>
+ * along with brasero. If not, write to:
+ * The Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301, USA.
*/
#ifndef _BRASERO_DRIVE_SELECTION_H_
#define _BRASERO_DRIVE_SELECTION_H_
+#include <glib-object.h>
+
#include <gtk/gtk.h>
-#include <brasero-drive.h>
#include <brasero-medium-monitor.h>
+#include <brasero-drive.h>
G_BEGIN_DECLS
-#define BRASERO_TYPE_DRIVE_SELECTION (brasero_drive_selection_get_type ())
-#define BRASERO_DRIVE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BRASERO_TYPE_DRIVE_SELECTION, BraseroDriveSelection))
-#define BRASERO_DRIVE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BRASERO_TYPE_DRIVE_SELECTION, BraseroDriveSelectionClass))
-#define BRASERO_IS_DRIVE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, BRASERO_TYPE_DRIVE_SELECTION))
-#define BRASERO_IS_DRIVE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BRASERO_TYPE_DRIVE_SELECTION))
-
-
-typedef struct {
- GtkComboBox widget;
-} BraseroDriveSelection;
-
-typedef struct {
- GtkComboBoxClass parent_class;
-
- void (* drive_changed) (GtkWidget *selection,
- BraseroDrive *drive);
-} BraseroDriveSelectionClass;
-
-GType brasero_drive_selection_get_type (void) G_GNUC_CONST;
-GtkWidget *brasero_drive_selection_new (void);
-
-void brasero_drive_selection_set_active (BraseroDriveSelection *selection,
- BraseroDrive *drive);
-BraseroDrive *brasero_drive_selection_get_active (BraseroDriveSelection *selection);
-
-void brasero_drive_selection_show_type (BraseroDriveSelection *drive,
- BraseroDriveType type);
+#define BRASERO_TYPE_DRIVE_SELECTION (brasero_drive_selection_get_type ())
+#define BRASERO_DRIVE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BRASERO_TYPE_DRIVE_SELECTION, BraseroDriveSelection))
+#define BRASERO_DRIVE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BRASERO_TYPE_DRIVE_SELECTION, BraseroDriveSelectionClass))
+#define BRASERO_IS_DRIVE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BRASERO_TYPE_DRIVE_SELECTION))
+#define BRASERO_IS_DRIVE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BRASERO_TYPE_DRIVE_SELECTION))
+#define BRASERO_DRIVE_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), BRASERO_TYPE_DRIVE_SELECTION, BraseroDriveSelectionClass))
+
+typedef struct _BraseroDriveSelectionClass BraseroDriveSelectionClass;
+typedef struct _BraseroDriveSelection BraseroDriveSelection;
+
+struct _BraseroDriveSelectionClass
+{
+ GtkComboBoxClass parent_class;
+
+ /* Signals */
+ void (* drive_changed) (BraseroDriveSelection *selection,
+ BraseroDrive *drive);
+};
+
+struct _BraseroDriveSelection
+{
+ GtkComboBox parent_instance;
+};
+
+GType brasero_drive_selection_get_type (void) G_GNUC_CONST;
+GtkWidget* brasero_drive_selection_new (void);
+
+BraseroDrive *
+brasero_drive_selection_get_active (BraseroDriveSelection *selection);
+
+gboolean
+brasero_drive_selection_set_active (BraseroDriveSelection *selection,
+ BraseroDrive *drive);
+
+void
+brasero_drive_selection_show_type (BraseroDriveSelection *selection,
+ BraseroDriveType type);
G_END_DECLS
Modified: trunk/libbrasero-media/brasero-drive.c
==============================================================================
--- trunk/libbrasero-media/brasero-drive.c (original)
+++ trunk/libbrasero-media/brasero-drive.c Wed Jan 14 15:44:38 2009
@@ -98,7 +98,7 @@
*
* Returns the #GDrive corresponding to this #BraseroDrive
*
- * Return value: a #GDrive or NULL.
+ * Return value: a #GDrive or NULL. Unref after use.
**/
GDrive *
brasero_drive_get_gdrive (BraseroDrive *drive)
Modified: trunk/libbrasero-media/brasero-media-private.h
==============================================================================
--- trunk/libbrasero-media/brasero-media-private.h (original)
+++ trunk/libbrasero-media/brasero-media-private.h Wed Jan 14 15:44:38 2009
@@ -2,8 +2,8 @@
* burn-media-private.h
*
* Wed Oct 8 16:42:17 2008
- * Copyright 2008 ykw
- * <ykw localhost localdomain>
+ * Copyright 2008 Rouquier Philippe
+ * <bonfire-app wanadoo fr>
****************************************************************************/
/*
Modified: trunk/libbrasero-media/brasero-media.c
==============================================================================
--- trunk/libbrasero-media/brasero-media.c (original)
+++ trunk/libbrasero-media/brasero-media.c Wed Jan 14 15:44:38 2009
@@ -2,8 +2,8 @@
* burn-media.c
*
* Wed Oct 8 16:40:48 2008
- * Copyright 2008 ykw
- * <ykw localhost localdomain>
+ * Copyright 2008 Rouquier Philippe
+ * <bonfire-app wanadoo fr>
****************************************************************************/
/*
Copied: trunk/libbrasero-media/brasero-media.h.in (from r1747, /trunk/libbrasero-media/brasero-media.h)
==============================================================================
--- /trunk/libbrasero-media/brasero-media.h (original)
+++ trunk/libbrasero-media/brasero-media.h.in Wed Jan 14 15:44:38 2009
@@ -2,8 +2,8 @@
* burn-media.h
*
* Wed Oct 8 16:42:17 2008
- * Copyright 2008 ykw
- * <ykw localhost localdomain>
+ * Copyright 2008 Philippe Rouquier
+ * <bonfire-app wanadoo fr>
****************************************************************************/
/*
@@ -19,7 +19,7 @@
*
* 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., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 021101301, USA
*/
#ifndef _BURN_MEDIA_H
@@ -30,6 +30,21 @@
G_BEGIN_DECLS
/**
+ * Some needed information about the library
+ */
+
+#define LIBBRASERO_MEDIA_VERSION_MAJOR \
+ @BRASERO_MAJOR_VERSION@
+#define LIBBRASERO_MEDIA_VERSION_MINOR \
+ @BRASERO_MINOR_VERSION@
+#define LIBBRASERO_MEDIA_VERSION_MICRO \
+ @BRASERO_SUB@
+#define LIBBRASERO_MEDIA_AGE \
+ @LT_CURRENT@@LT_REVISION@@LT_AGE@
+#define LIBBRASERO_MEDIA_INSTALL \
+ "@prefix@"
+
+/**
* To start and stop the library
*/
@@ -216,3 +231,4 @@
#endif /* _BURN_MEDIA_H */
+
Modified: trunk/libbrasero-media/brasero-medium-monitor.h
==============================================================================
--- trunk/libbrasero-media/brasero-medium-monitor.h (original)
+++ trunk/libbrasero-media/brasero-medium-monitor.h Wed Jan 14 15:44:38 2009
@@ -25,6 +25,7 @@
#include <glib-object.h>
+#include <brasero-medium.h>
#include <brasero-drive.h>
G_BEGIN_DECLS
@@ -46,10 +47,10 @@
/* Signals */
void (*drive_added) (BraseroMediumMonitor *monitor,
- BraseroDrive *medium);
+ BraseroDrive *drive);
void (*drive_removed) (BraseroMediumMonitor *monitor,
- BraseroDrive*medium);
+ BraseroDrive *drive);
void (*medium_added) (BraseroMediumMonitor *monitor,
BraseroMedium *medium);
Modified: trunk/libbrasero-media/brasero-medium-selection.c
==============================================================================
--- trunk/libbrasero-media/brasero-medium-selection.c (original)
+++ trunk/libbrasero-media/brasero-medium-selection.c Wed Jan 14 15:44:38 2009
@@ -40,6 +40,8 @@
typedef struct _BraseroMediumSelectionPrivate BraseroMediumSelectionPrivate;
struct _BraseroMediumSelectionPrivate
{
+ BraseroMedium *active;
+
BraseroMediaType type;
gulong added_sig;
gulong removed_sig;
@@ -48,8 +50,7 @@
#define BRASERO_MEDIUM_SELECTION_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_MEDIUM_SELECTION, BraseroMediumSelectionPrivate))
typedef enum {
- ADDED_SIGNAL,
- REMOVED_SIGNAL,
+ CHANGED_SIGNAL,
LAST_SIGNAL
} BraseroMediumSelectionSignalType;
@@ -201,6 +202,42 @@
}
static void
+brasero_medium_selection_set_current_medium (BraseroMediumSelection *self,
+ GtkTreeIter *iter)
+{
+ BraseroMediumSelectionPrivate *priv;
+ BraseroMedium *medium = NULL;
+ GtkTreeModel *model;
+
+ priv = BRASERO_MEDIUM_SELECTION_PRIVATE (self);
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (self));
+ gtk_tree_model_get (model, iter,
+ MEDIUM_COL, &medium,
+ -1);
+
+ if (priv->active == medium)
+ return;
+
+ if (priv->active)
+ g_object_unref (priv->active);
+
+ priv->active = medium;
+
+ if (priv->active) {
+ gtk_widget_set_sensitive (GTK_WIDGET (self), TRUE);
+ g_object_ref (priv->active);
+ }
+ else
+ gtk_widget_set_sensitive (GTK_WIDGET (self), FALSE);
+
+ g_signal_emit (self,
+ brasero_medium_selection_signals [CHANGED_SIGNAL],
+ 0,
+ priv->active);
+}
+
+static void
brasero_drive_selection_set_tooltip (BraseroMediumSelection *self)
{
BraseroMediumSelectionPrivate *priv;
@@ -222,9 +259,17 @@
}
static void
-brasero_medium_selection_changed (GtkComboBox *box)
+brasero_medium_selection_changed (GtkComboBox *combo)
{
- brasero_drive_selection_set_tooltip (BRASERO_MEDIUM_SELECTION (box));
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ model = gtk_combo_box_get_model (combo);
+ if (!gtk_combo_box_get_active_iter (combo, &iter))
+ return;
+
+ brasero_medium_selection_set_current_medium (BRASERO_MEDIUM_SELECTION (combo), &iter);
+ brasero_drive_selection_set_tooltip (BRASERO_MEDIUM_SELECTION (combo));
}
/**
@@ -232,7 +277,7 @@
* @selector: a #BraseroMediumSelection
* @medium: a #BraseroMedium to set as the active one in the selector
*
- * Sets the active medium.
+ * Sets the active medium. Emits the ::medium-changed signal.
*
* Return value: a #gboolean. TRUE if it succeeded, FALSE otherwise.
**/
@@ -240,10 +285,19 @@
brasero_medium_selection_set_active (BraseroMediumSelection *selector,
BraseroMedium *medium)
{
+ BraseroMediumSelectionPrivate *priv;
gboolean result = FALSE;
GtkTreeModel *model;
GtkTreeIter iter;
+ g_return_val_if_fail (selector != NULL, FALSE);
+ g_return_val_if_fail (BRASERO_IS_MEDIUM_SELECTION (selector), FALSE);
+
+ priv = BRASERO_MEDIUM_SELECTION_PRIVATE (selector);
+
+ if (priv->active == medium)
+ return TRUE;
+
model = gtk_combo_box_get_model (GTK_COMBO_BOX (selector));
if (!gtk_tree_model_get_iter_first (model, &iter))
return FALSE;
@@ -260,6 +314,7 @@
g_object_unref (iter_medium);
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (selector), &iter);
+ brasero_medium_selection_set_current_medium (selector, &iter);
result = TRUE;
break;
}
@@ -281,18 +336,16 @@
BraseroMedium *
brasero_medium_selection_get_active (BraseroMediumSelection *selector)
{
- BraseroMedium *medium;
- GtkTreeModel *model;
- GtkTreeIter iter;
+ BraseroMediumSelectionPrivate *priv;
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (selector));
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (selector), &iter))
+ g_return_val_if_fail (selector != NULL, NULL);
+ g_return_val_if_fail (BRASERO_IS_MEDIUM_SELECTION (selector), NULL);
+
+ priv = BRASERO_MEDIUM_SELECTION_PRIVATE (selector);
+ if (!priv->active)
return NULL;
- gtk_tree_model_get (model, &iter,
- MEDIUM_COL, &medium,
- -1);
- return medium;
+ return g_object_ref (priv->active);
}
static void
@@ -322,8 +375,8 @@
g_object_unref (icon);
g_object_unref (monitor);
- gtk_widget_set_sensitive (GTK_WIDGET (self), FALSE);
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self), iter);
+ brasero_medium_selection_set_current_medium (self, iter);
}
static void
@@ -362,6 +415,9 @@
GSList *list;
GSList *item;
+ g_return_if_fail (selector != NULL);
+ g_return_if_fail (BRASERO_IS_MEDIUM_SELECTION (selector));
+
priv = BRASERO_MEDIUM_SELECTION_PRIVATE (selector);
priv->type = type;
@@ -392,17 +448,10 @@
g_object_unref (medium);
if (!node) {
- if (gtk_list_store_remove (GTK_LIST_STORE (model), &iter)) {
- g_signal_emit (selector,
- brasero_medium_selection_signals [REMOVED_SIGNAL],
- 0);
+ if (gtk_list_store_remove (GTK_LIST_STORE (model), &iter))
continue;
- }
- /* no more iter in the tree get out */
- g_signal_emit (selector,
- brasero_medium_selection_signals [REMOVED_SIGNAL],
- 0);
+ /* no more iter in the tree get out */
break;
}
@@ -430,9 +479,6 @@
ICON_COL, medium_icon,
-1);
g_free (medium_name);
- g_signal_emit (selector,
- brasero_medium_selection_signals [ADDED_SIGNAL],
- 0);
}
g_slist_foreach (list, (GFunc) g_object_unref, NULL);
g_slist_free (list);
@@ -444,8 +490,10 @@
}
gtk_widget_set_sensitive (GTK_WIDGET (selector), TRUE);
- if (gtk_combo_box_get_active (GTK_COMBO_BOX (selector)) == -1)
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (selector)) == -1) {
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (selector), &iter);
+ brasero_medium_selection_set_current_medium (selector, &iter);
+ }
}
/**
@@ -569,12 +617,10 @@
g_free (medium_name);
gtk_widget_set_sensitive (GTK_WIDGET (self), TRUE);
- if (gtk_combo_box_get_active (GTK_COMBO_BOX (self)) == -1)
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (self)) == -1) {
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self), &iter);
-
- g_signal_emit (self,
- brasero_medium_selection_signals [ADDED_SIGNAL],
- 0);
+ brasero_medium_selection_set_current_medium (self, &iter);
+ }
}
static void
@@ -599,9 +645,6 @@
if (medium == iter_medium) {
g_object_unref (iter_medium);
gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
- g_signal_emit (self,
- brasero_medium_selection_signals [REMOVED_SIGNAL],
- 0);
break;
}
@@ -616,8 +659,10 @@
return;
}
- if (gtk_combo_box_get_active (GTK_COMBO_BOX (self)) == -1)
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (self)) == -1) {
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self), &iter);
+ brasero_medium_selection_set_current_medium (self, &iter);
+ }
}
static void
@@ -743,7 +788,7 @@
static void
brasero_medium_selection_class_init (BraseroMediumSelectionClass *klass)
{
- GObjectClass* object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkComboBoxClass *combo_class = GTK_COMBO_BOX_CLASS (klass);
g_type_class_add_private (klass, sizeof (BraseroMediumSelectionPrivate));
@@ -763,27 +808,17 @@
0, BRASERO_MEDIA_TYPE_ALL,
BRASERO_MEDIA_TYPE_NONE,
G_PARAM_READWRITE));
-
- brasero_medium_selection_signals [ADDED_SIGNAL] =
- g_signal_new ("medium_added",
- BRASERO_TYPE_MEDIUM_SELECTION,
- G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION|G_SIGNAL_NO_RECURSE,
- 0,
- NULL,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
- brasero_medium_selection_signals [REMOVED_SIGNAL] =
- g_signal_new ("medium_removed",
+ brasero_medium_selection_signals [CHANGED_SIGNAL] =
+ g_signal_new ("medium_changed",
BRASERO_TYPE_MEDIUM_SELECTION,
G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION|G_SIGNAL_NO_RECURSE,
- 0,
+ G_STRUCT_OFFSET (BraseroMediumSelectionClass, medium_changed),
NULL,
NULL,
- g_cclosure_marshal_VOID__VOID,
+ g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE,
- 0);
+ 1,
+ BRASERO_TYPE_MEDIUM);
}
GtkWidget *
Modified: trunk/libbrasero-media/brasero-medium-selection.h
==============================================================================
--- trunk/libbrasero-media/brasero-medium-selection.h (original)
+++ trunk/libbrasero-media/brasero-medium-selection.h Wed Jan 14 15:44:38 2009
@@ -47,6 +47,10 @@
{
GtkComboBoxClass parent_class;
+ /* Signals */
+ void (* medium_changed) (BraseroMediumSelection *selection,
+ BraseroMedium *medium);
+
/* virtual function */
gchar * (*format_medium_string) (BraseroMediumSelection *selection,
BraseroMedium *medium);
Modified: trunk/libbrasero-media/brasero-medium.c
==============================================================================
--- trunk/libbrasero-media/brasero-medium.c (original)
+++ trunk/libbrasero-media/brasero-medium.c Wed Jan 14 15:44:38 2009
@@ -243,6 +243,9 @@
gchar *label;
gchar *name;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (BRASERO_IS_MEDIUM (self), NULL);
+
priv = BRASERO_MEDIUM_PRIVATE (self);
media = brasero_medium_get_status (BRASERO_MEDIUM (self));
Modified: trunk/libbrasero-media/brasero-volume.h
==============================================================================
--- trunk/libbrasero-media/brasero-volume.h (original)
+++ trunk/libbrasero-media/brasero-volume.h Wed Jan 14 15:44:38 2009
@@ -26,7 +26,7 @@
#include <glib-object.h>
#include <gio/gio.h>
-#include <brasero-drive.h>
+#include <brasero/brasero-drive.h>
G_BEGIN_DECLS
Modified: trunk/nautilus/Makefile.am
==============================================================================
--- trunk/nautilus/Makefile.am (original)
+++ trunk/nautilus/Makefile.am Wed Jan 14 15:44:38 2009
@@ -1,9 +1,8 @@
module_flags = -avoid-version -module
INCLUDES = \
+ -I$(top_srcdir)/libbrasero-media/ \
$(NAUTILUS_EXTENSION_CFLAGS) \
- $(BRASERO_DBUS_CFLAGS) \
- $(BRASERO_HAL_CFLAGS) \
$(WERROR) \
-D_FILE_OFFSET_BITS=64 \
-D_GNU_SOURCE \
@@ -36,8 +35,6 @@
$(NULL)
libnautilus_brasero_extension_la_LIBADD = \
- $(NAUTILUS_EXTENSION_LIBS) \
- $(BRASERO_DBUS_LIBS) \
- $(BRASERO_HAL_LIBS)
+ $(NAUTILUS_EXTENSION_LIBS) ../libbrasero-media/libbrasero-media.la
libnautilus_brasero_extension_la_LDFLAGS = $(module_flags)
Modified: trunk/nautilus/nautilus-burn-bar.c
==============================================================================
--- trunk/nautilus/nautilus-burn-bar.c (original)
+++ trunk/nautilus/nautilus-burn-bar.c Wed Jan 14 15:44:38 2009
@@ -126,6 +126,7 @@
{
GtkWidget *label;
GtkWidget *hbox;
+ GtkWidget *image;
bar->priv = NAUTILUS_DISC_BURN_BAR_GET_PRIVATE (bar);
@@ -139,6 +140,10 @@
gtk_widget_show (bar->priv->button);
gtk_box_pack_end (GTK_BOX (hbox), bar->priv->button, FALSE, FALSE, 0);
+ image = gtk_image_new_from_icon_name ("media-optical-burn", GTK_ICON_SIZE_BUTTON);
+ gtk_widget_show (image);
+ gtk_button_set_image (GTK_BUTTON (bar->priv->button), image);
+
g_signal_connect (bar->priv->button, "clicked",
G_CALLBACK (button_clicked_cb),
bar);
Modified: trunk/nautilus/nautilus-burn-extension.c
==============================================================================
--- trunk/nautilus/nautilus-burn-extension.c (original)
+++ trunk/nautilus/nautilus-burn-extension.c Wed Jan 14 15:44:38 2009
@@ -27,11 +27,15 @@
#include <stdlib.h>
#include <string.h>
#include <glib/gi18n-lib.h>
+#include <gdk/gdkx.h>
#include <gtk/gtk.h>
-#include <libhal.h>
#include <libnautilus-extension/nautilus-menu-provider.h>
#include <libnautilus-extension/nautilus-location-widget-provider.h>
+#include "brasero-media.h"
+#include "brasero-medium-monitor.h"
+#include "brasero-drive.h"
+#include "brasero-medium.h"
#include "nautilus-burn-bar.h"
#define BURN_URI "burn:///"
@@ -115,11 +119,21 @@
#endif
static void
-launch_process (char **argv, GtkWindow *parent)
+launch_process (char **argv, gint next_arg, GtkWindow *parent)
{
GtkWidget *dialog;
GError *error;
+ if (parent && GTK_WIDGET (parent)->window) {
+ guint xid;
+
+ xid = gdk_x11_drawable_get_xid (GDK_DRAWABLE (GTK_WIDGET (parent)->window));
+ if (xid > 0) {
+ argv [next_arg++] = g_strdup ("-x");
+ argv [next_arg] = g_strdup_printf ("%d", xid);
+ }
+ }
+
error = NULL;
if (!g_spawn_async (NULL,
argv, NULL,
@@ -149,16 +163,15 @@
static void
launch_brasero_on_window (GtkWindow *window)
{
- char *argv [3];
+ int i;
+ char *argv [5] = { NULL, };
argv [0] = g_build_filename (BINDIR, "brasero", NULL);
argv [1] = g_strdup ("-n");
- argv [2] = NULL;
-
- launch_process (argv, window);
- g_free (argv [0]);
- g_free (argv [1]);
+ launch_process (argv, 2, window);
+ for (i = 0; argv [i]; i++)
+ g_free (argv [i]);
}
static void
@@ -185,9 +198,10 @@
gpointer user_data)
{
NautilusFileInfo *file_info;
- char *argv [4];
+ char *argv [6] = { NULL, };
char *uri;
char *image_name;
+ int i;
file_info = g_object_get_data (G_OBJECT (item), "file_info");
@@ -205,20 +219,19 @@
argv [0] = g_build_filename (BINDIR, "brasero", NULL);
argv [1] = g_strdup ("-i");
argv [2] = image_name;
- argv [3] = NULL;
- launch_process (argv, GTK_WINDOW (user_data));
+ launch_process (argv, 3, GTK_WINDOW (user_data));
- g_free (argv [1]);
- g_free (argv [0]);
- g_free (image_name);
+ for (i = 0; argv [i]; i++)
+ g_free (argv [i]);
}
static void
copy_disc_activate_cb (NautilusMenuItem *item,
gpointer user_data)
{
- char *argv [4];
+ int i;
+ char *argv [6] = { NULL, };
char *device_path;
device_path = g_object_get_data (G_OBJECT (item), "drive_device_path");
@@ -231,19 +244,19 @@
argv [0] = g_build_filename (BINDIR, "brasero", NULL);
argv [1] = g_strdup ("-c");
argv [2] = device_path;
- argv [3] = NULL;
- launch_process (argv, GTK_WINDOW (user_data));
+ launch_process (argv, 3, GTK_WINDOW (user_data));
- g_free (argv [1]);
- g_free (argv [0]);
+ for (i = 0; argv [i]; i++)
+ g_free (argv [i]);
}
static void
blank_disc_activate_cb (NautilusMenuItem *item,
gpointer user_data)
{
- char *argv [4];
+ int i;
+ char *argv [6]= { NULL, };
char *device_path;
device_path = g_object_get_data (G_OBJECT (item), "drive_device_path");
@@ -256,19 +269,19 @@
argv [0] = g_build_filename (BINDIR, "brasero", NULL);
argv [1] = g_strdup ("-b");
argv [2] = device_path;
- argv [3] = NULL;
- launch_process (argv, GTK_WINDOW (user_data));
+ launch_process (argv, 3, GTK_WINDOW (user_data));
- g_free (argv [1]);
- g_free (argv [0]);
+ for (i = 0; argv [i]; i++)
+ g_free (argv [i]);
}
static void
check_disc_activate_cb (NautilusMenuItem *item,
gpointer user_data)
{
- char *argv [4];
+ int i;
+ char *argv [6] = { NULL, };
char *device_path;
device_path = g_object_get_data (G_OBJECT (item), "drive_device_path");
@@ -281,78 +294,42 @@
argv [0] = g_build_filename (BINDIR, "brasero", NULL);
argv [1] = g_strdup ("-k");
argv [2] = device_path;
- argv [3] = NULL;
- launch_process (argv, GTK_WINDOW (user_data));
+ launch_process (argv, 3, GTK_WINDOW (user_data));
- g_free (argv [1]);
- g_free (argv [0]);
+ for (i = 0; argv [i]; i++)
+ g_free (argv [i]);
}
-static LibHalContext *
-get_hal_context (void)
+static gboolean
+volume_is_blank (GVolume *volume)
{
- static LibHalContext *ctx = NULL;
- DBusError error;
- DBusConnection *dbus_conn;
-
- if (ctx == NULL) {
- ctx = libhal_ctx_new ();
- if (ctx == NULL) {
- g_warning ("Could not create a HAL context");
- } else {
- dbus_error_init (&error);
- dbus_conn = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
-
- if (dbus_error_is_set (&error)) {
- g_warning ("Could not connect to system bus: %s", error.message);
- dbus_error_free (&error);
- return NULL;
- }
+ BraseroMediumMonitor *monitor;
+ BraseroMedium *medium;
+ BraseroDrive *drive;
+ gchar *device;
+ gboolean is_blank;
- libhal_ctx_set_dbus_connection (ctx, dbus_conn);
-
- if (! libhal_ctx_init (ctx, &error)) {
- g_warning ("Could not initalize the HAL context: %s",
- error.message);
+ is_blank = FALSE;
- if (dbus_error_is_set (&error))
- dbus_error_free (&error);
+ device = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
+ if (!device)
+ return FALSE;
- libhal_ctx_free (ctx);
- ctx = NULL;
- }
- }
- }
+ DEBUG_PRINT ("Got device: %s\n", device);
- return ctx;
-}
+ monitor = brasero_medium_monitor_get_default ();
+ drive = brasero_medium_monitor_get_drive (monitor, device);
+ g_object_unref (monitor);
+ g_free (device);
-static gboolean
-volume_is_blank (GVolume *volume)
-{
- LibHalContext *ctx;
- char *udi;
- gboolean is_blank;
-
- ctx = get_hal_context ();
- if (ctx == NULL) {
+ if (drive == NULL)
return FALSE;
- }
-
- is_blank = FALSE;
- udi = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_HAL_UDI);
- DEBUG_PRINT ("Got udi: %s\n", udi);
- if (udi != NULL) {
- is_blank = libhal_device_get_property_bool (ctx,
- udi,
- "volume.disc.is_blank",
- NULL);
- }
- g_free (udi);
+ medium = brasero_drive_get_medium (drive);
+ is_blank = (brasero_medium_get_status (medium) & BRASERO_MEDIUM_BLANK);
+ g_object_unref (drive);
- DEBUG_PRINT ("is-blank: %d\n", is_blank);
return is_blank;
}
@@ -377,39 +354,28 @@
}
static gboolean
-drive_is_cd_device (GDrive *drive)
+drive_is_cd_device (GDrive *gdrive)
{
- LibHalContext *ctx;
- char *udi;
- gboolean is_cd;
+ BraseroMediumMonitor *monitor;
+ BraseroDrive *drive;
+ gchar *device;
- ctx = get_hal_context ();
- if (ctx == NULL) {
+ device = g_drive_get_identifier (gdrive, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
+ if (!device)
return FALSE;
- }
-
- is_cd = FALSE;
- udi = g_drive_get_identifier (drive, G_VOLUME_IDENTIFIER_KIND_HAL_UDI);
- DEBUG_PRINT ("Got udi: %s\n", udi);
+ DEBUG_PRINT ("Got device: %s\n", device);
- if (udi != NULL) {
- char *drive_type;
- drive_type = libhal_device_get_property_string (ctx,
- udi,
- "storage.drive_type",
- NULL);
- DEBUG_PRINT ("Got drive type: '%s'\n", drive_type);
- if (drive_type != NULL && strcmp (drive_type, "cdrom") == 0) {
- is_cd = TRUE;
- }
- g_free (drive_type);
- }
- g_free (udi);
+ monitor = brasero_medium_monitor_get_default ();
+ drive = brasero_medium_monitor_get_drive (monitor, device);
+ g_object_unref (monitor);
+ g_free (device);
- DEBUG_PRINT ("is-cdrom: %d\n", is_cd);
-
- return is_cd;
+ if (drive == NULL)
+ return FALSE;
+
+ g_object_unref (drive);
+ return TRUE;
}
static GList *
@@ -468,7 +434,7 @@
g_object_set_data (G_OBJECT (item), "file_info", file_info);
g_object_set_data (G_OBJECT (item), "window", window);
g_signal_connect (item, "activate",
- G_CALLBACK (write_iso_activate_cb), NULL);
+ G_CALLBACK (write_iso_activate_cb), window);
items = g_list_append (items, item);
}
@@ -522,7 +488,7 @@
g_object_set_data (G_OBJECT (item), "window", window);
g_object_set_data_full (G_OBJECT (item), "drive_device_path", g_strdup (device_path), g_free);
g_signal_connect (item, "activate",
- G_CALLBACK (copy_disc_activate_cb), NULL);
+ G_CALLBACK (copy_disc_activate_cb), window);
items = g_list_append (items, item);
/* ... or if it's a rewritable medium to blank it ... */
@@ -534,7 +500,7 @@
g_object_set_data (G_OBJECT (item), "window", window);
g_object_set_data_full (G_OBJECT (item), "drive_device_path", g_strdup (device_path), g_free);
g_signal_connect (item, "activate",
- G_CALLBACK (blank_disc_activate_cb), NULL);
+ G_CALLBACK (blank_disc_activate_cb), window);
items = g_list_append (items, item);
/* ... or verify medium. */
@@ -546,7 +512,7 @@
g_object_set_data (G_OBJECT (item), "window", window);
g_object_set_data_full (G_OBJECT (item), "drive_device_path", g_strdup (device_path), g_free);
g_signal_connect (item, "activate",
- G_CALLBACK (check_disc_activate_cb), NULL);
+ G_CALLBACK (check_disc_activate_cb), window);
items = g_list_append (items, item);
g_free (device_path);
@@ -584,7 +550,8 @@
_("Write contents to a CD or DVD disc"),
"brasero");
g_signal_connect (item, "activate",
- G_CALLBACK (write_activate_cb), window);
+ G_CALLBACK (write_activate_cb),
+ window);
items = g_list_append (items, item);
g_object_set (item, "sensitive", ! NAUTILUS_DISC_BURN (provider)->priv->empty, NULL);
@@ -934,25 +901,16 @@
void
nautilus_module_initialize (GTypeModule *module)
{
- nautilus_disc_burn_register_type (module);
- bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ brasero_media_library_start ();
- /* As long as it's not a library I don't see how to do it differently */
- gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
- "/usr/share/brasero/icons");
- gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
- "/usr/local/share/brasero/icons");
+ nautilus_disc_burn_register_type (module);
}
void
nautilus_module_shutdown (void)
{
- LibHalContext *ctx;
- ctx = get_hal_context ();
- if (ctx != NULL) {
- libhal_ctx_free (ctx);
- }
+ /* Don't do that in case another module would need the library */
+ //brasero_media_library_stop ();
}
void
Modified: trunk/src/brasero-app.c
==============================================================================
--- trunk/src/brasero-app.c (original)
+++ trunk/src/brasero-app.c Wed Jan 14 15:44:38 2009
@@ -75,7 +75,9 @@
gint height;
gchar *saved_contents;
+
guint is_maximised:1;
+ guint mainwin_running:1;
};
#define BRASERO_APP_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_APP, BraseroAppPrivate))
@@ -908,7 +910,7 @@
BraseroAppPrivate *priv;
priv = BRASERO_APP_PRIVATE (app);
- if (priv->mainwin)
+ if (priv->mainwin_running)
gtk_widget_show (GTK_WIDGET (priv->mainwin));
}
@@ -919,8 +921,10 @@
priv = BRASERO_APP_PRIVATE (app);
- if (!priv->mainwin) {
+ if (!priv->mainwin_running) {
if (priv->parent) {
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE);
+ gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE);
gtk_widget_realize (GTK_WIDGET (window));
gtk_window_set_modal (GTK_WINDOW (window), TRUE);
gdk_window_set_transient_for (GTK_WIDGET (window)->window, priv->parent);
@@ -1429,6 +1433,7 @@
priv = BRASERO_APP_PRIVATE (app);
+ priv->mainwin_running = 1;
gtk_widget_show (GTK_WIDGET (priv->mainwin));
gtk_main ();
}
Modified: trunk/src/brasero-burn-options.c
==============================================================================
--- trunk/src/brasero-burn-options.c (original)
+++ trunk/src/brasero-burn-options.c Wed Jan 14 15:44:38 2009
@@ -363,14 +363,6 @@
}
static void
-brasero_burn_options_medium_num_changed (BraseroMediumSelection *selection,
- BraseroBurnOptions *self)
-{
- brasero_burn_options_update_no_medium_warning (self);
- gtk_window_resize (GTK_WINDOW (self), 10, 10);
-}
-
-static void
brasero_burn_options_init (BraseroBurnOptions *object)
{
BraseroBurnOptionsPrivate *priv;
@@ -470,15 +462,6 @@
"is-valid",
G_CALLBACK (brasero_burn_options_valid_media_cb),
object);
-
- g_signal_connect (priv->selection,
- "medium-added",
- G_CALLBACK (brasero_burn_options_medium_num_changed),
- object);
- g_signal_connect (priv->selection,
- "medium-removed",
- G_CALLBACK (brasero_burn_options_medium_num_changed),
- object);
}
static void
Modified: trunk/src/brasero-dest-selection.c
==============================================================================
--- trunk/src/brasero-dest-selection.c (original)
+++ trunk/src/brasero-dest-selection.c Wed Jan 14 15:44:38 2009
@@ -126,41 +126,36 @@
}
static void
-brasero_dest_selection_medium_changed (GtkComboBox *combo)
+brasero_dest_selection_medium_changed (BraseroMediumSelection *selection,
+ BraseroMedium *medium)
{
BraseroDestSelectionPrivate *priv;
- BraseroMedium *medium;
- priv = BRASERO_DEST_SELECTION_PRIVATE (combo);
+ priv = BRASERO_DEST_SELECTION_PRIVATE (selection);
if (!priv->session)
goto chain;
- medium = brasero_medium_selection_get_active (BRASERO_MEDIUM_SELECTION (combo));
if (!medium) {
- gtk_widget_set_sensitive (GTK_WIDGET (combo), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (selection), FALSE);
goto chain;
}
- if (brasero_medium_get_drive (medium) == brasero_burn_session_get_burner (priv->session)) {
- g_object_unref (medium);
+ if (brasero_medium_get_drive (medium) == brasero_burn_session_get_burner (priv->session))
goto chain;
- }
if (priv->locked_drive && priv->locked_drive != brasero_medium_get_drive (medium)) {
- brasero_medium_selection_set_active (BRASERO_MEDIUM_SELECTION (combo), medium);
- g_object_unref (medium);
+ brasero_medium_selection_set_active (selection, medium);
goto chain;
}
brasero_burn_session_set_burner (priv->session, brasero_medium_get_drive (medium));
- gtk_widget_set_sensitive (GTK_WIDGET (combo), (priv->locked_drive == NULL));
- g_object_unref (medium);
+ gtk_widget_set_sensitive (GTK_WIDGET (selection), (priv->locked_drive == NULL));
chain:
- if (GTK_COMBO_BOX_CLASS (brasero_dest_selection_parent_class)->changed)
- GTK_COMBO_BOX_CLASS (brasero_dest_selection_parent_class)->changed (combo);
+ if (BRASERO_MEDIUM_SELECTION_CLASS (brasero_dest_selection_parent_class)->medium_changed)
+ BRASERO_MEDIUM_SELECTION_CLASS (brasero_dest_selection_parent_class)->medium_changed (selection, medium);
}
static void
@@ -497,7 +492,6 @@
brasero_dest_selection_class_init (BraseroDestSelectionClass *klass)
{
GObjectClass* object_class = G_OBJECT_CLASS (klass);
- GtkComboBoxClass *combo_box_class = GTK_COMBO_BOX_CLASS (klass);
BraseroMediumSelectionClass *medium_selection_class = BRASERO_MEDIUM_SELECTION_CLASS (klass);
g_type_class_add_private (klass, sizeof (BraseroDestSelectionPrivate));
@@ -506,14 +500,12 @@
object_class->set_property = brasero_dest_selection_set_property;
object_class->get_property = brasero_dest_selection_get_property;
- combo_box_class->changed = brasero_dest_selection_medium_changed;
-
medium_selection_class->format_medium_string = brasero_dest_selection_format_medium_string;
-
+ medium_selection_class->medium_changed = brasero_dest_selection_medium_changed;
g_object_class_install_property (object_class,
PROP_SESSION,
g_param_spec_object ("session",
- "The session to work with",
+ "The session",
"The session to work with",
BRASERO_TYPE_BURN_SESSION,
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
Modified: trunk/src/brasero-disc.c
==============================================================================
--- trunk/src/brasero-disc.c (original)
+++ trunk/src/brasero-disc.c Wed Jan 14 15:44:38 2009
@@ -654,7 +654,6 @@
"\t* ", _("select files in the selection pane and click the \"Add\" button"), "\n",
"\t* ", _("drag files in this area from the selection pane or from the file manager"), "\n",
"\t* ", _("double click on files in the selection pane"), "\n",
-
"\t* ", _("copy files (from file manager for example) and paste in this area"), "\n",
NULL);
Modified: trunk/src/brasero-project.c
==============================================================================
--- trunk/src/brasero-project.c (original)
+++ trunk/src/brasero-project.c Wed Jan 14 15:44:38 2009
@@ -1620,7 +1620,6 @@
uri = uri ? uri : project->priv->project;
/* add it to recent manager */
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (project));
if (brasero_app_is_running (brasero_app_get_default ()))
brasero_project_add_to_recents (project, uri, TRUE);
@@ -1630,14 +1629,16 @@
title = g_strdup_printf (_("Brasero - %s (Data Disc)"), name);
else if (type == BRASERO_PROJECT_TYPE_AUDIO)
title = g_strdup_printf (_("Brasero - %s (Audio Disc)"), name);
- else if (type == BRASERO_PROJECT_TYPE_AUDIO)
+ else if (type == BRASERO_PROJECT_TYPE_VIDEO)
title = g_strdup_printf (_("Brasero - %s (Video Disc)"), name);
else
title = NULL;
g_free (name);
- gtk_window_set_title (GTK_WINDOW (toplevel), title);
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (project));
+ if (toplevel)
+ gtk_window_set_title (GTK_WINDOW (toplevel), title);
g_free (title);
/* update the menus */
Modified: trunk/src/brasero-src-selection.c
==============================================================================
--- trunk/src/brasero-src-selection.c (original)
+++ trunk/src/brasero-src-selection.c Wed Jan 14 15:44:38 2009
@@ -54,18 +54,17 @@
G_DEFINE_TYPE (BraseroSrcSelection, brasero_src_selection, BRASERO_TYPE_MEDIUM_SELECTION);
static void
-brasero_src_selection_medium_changed (GtkComboBox *combo_box)
+brasero_src_selection_medium_changed (BraseroMediumSelection *selection,
+ BraseroMedium *medium)
{
BraseroSrcSelectionPrivate *priv;
- BraseroMedium *medium = NULL;
BraseroDrive *drive = NULL;
- priv = BRASERO_SRC_SELECTION_PRIVATE (combo_box);
+ priv = BRASERO_SRC_SELECTION_PRIVATE (selection);
if (!priv->session)
goto chain;
- medium = brasero_medium_selection_get_active (BRASERO_MEDIUM_SELECTION (combo_box));
drive = brasero_medium_get_drive (medium);
/* NOTE: don't check for drive == NULL to set the session input type */
@@ -86,13 +85,10 @@
chain:
- if (medium)
- g_object_unref (medium);
+ gtk_widget_set_sensitive (GTK_WIDGET (selection), drive != NULL);
- gtk_widget_set_sensitive (GTK_WIDGET (combo_box), drive != NULL);
-
- if (GTK_COMBO_BOX_CLASS (brasero_src_selection_parent_class)->changed)
- GTK_COMBO_BOX_CLASS (brasero_src_selection_parent_class)->changed (combo_box);
+ if (BRASERO_MEDIUM_SELECTION_CLASS (brasero_src_selection_parent_class)->medium_changed)
+ BRASERO_MEDIUM_SELECTION_CLASS (brasero_src_selection_parent_class)->medium_changed (selection, medium);
}
GtkWidget *
@@ -146,6 +142,9 @@
switch (property_id) {
case PROP_SESSION:
+ {
+ BraseroMedium *medium;
+
session = g_value_get_object (value);
priv->session = session;
@@ -154,8 +153,10 @@
if (priv->track)
brasero_track_unref (priv->track);
- brasero_src_selection_medium_changed (GTK_COMBO_BOX (object));
+ medium = brasero_burn_session_get_src_medium (session);
+ brasero_src_selection_medium_changed (BRASERO_MEDIUM_SELECTION (object), medium);
break;
+ }
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -186,7 +187,7 @@
brasero_src_selection_class_init (BraseroSrcSelectionClass *klass)
{
GObjectClass* object_class = G_OBJECT_CLASS (klass);
- GtkComboBoxClass *combo_box_class = GTK_COMBO_BOX_CLASS (klass);
+ BraseroMediumSelectionClass *medium_selection_class = BRASERO_MEDIUM_SELECTION_CLASS (klass);
g_type_class_add_private (klass, sizeof (BraseroSrcSelectionPrivate));
@@ -194,7 +195,7 @@
object_class->set_property = brasero_src_selection_set_property;
object_class->get_property = brasero_src_selection_get_property;
- combo_box_class->changed = brasero_src_selection_medium_changed;
+ medium_selection_class->medium_changed = brasero_src_selection_medium_changed;
g_object_class_install_property (object_class,
PROP_SESSION,
Modified: trunk/src/brasero-tool-dialog.c
==============================================================================
--- trunk/src/brasero-tool-dialog.c (original)
+++ trunk/src/brasero-tool-dialog.c Wed Jan 14 15:44:38 2009
@@ -538,7 +538,7 @@
GTK_RESPONSE_CANCEL);
g_signal_connect (G_OBJECT (obj->priv->selector),
- "changed",
+ "medium-changed",
G_CALLBACK (brasero_tool_dialog_drive_changed_cb),
obj);
Modified: trunk/src/burn-plugin.c
==============================================================================
--- trunk/src/burn-plugin.c (original)
+++ trunk/src/burn-plugin.c Wed Jan 14 15:44:38 2009
@@ -950,13 +950,14 @@
priv = BRASERO_PLUGIN_PRIVATE (self);
value = gconf_entry_get_value (entry);
- if (value->type != GCONF_VALUE_INT)
+ if (!value)
+ priv->priority = 0;
+ else if (value->type != GCONF_VALUE_INT)
return;
-
- self = BRASERO_PLUGIN (data);
+ else
+ priv->priority = gconf_value_get_int (value);
is_active = brasero_plugin_get_active (self);
- priv->priority = gconf_value_get_int (value);
g_object_notify (G_OBJECT (self), "priority");
if (is_active != brasero_plugin_get_active (self))
Modified: trunk/src/burn-session.c
==============================================================================
--- trunk/src/burn-session.c (original)
+++ trunk/src/burn-session.c Wed Jan 14 15:44:38 2009
@@ -327,14 +327,19 @@
BraseroTrackType *type)
{
BraseroBurnSessionPrivate *priv;
+ BraseroTrackType input = { 0, };
g_return_if_fail (BRASERO_IS_BURN_SESSION (self));
g_return_if_fail (type != NULL);
priv = BRASERO_BURN_SESSION_PRIVATE (self);
+ brasero_burn_session_get_input_type (self, &input);
memcpy (&priv->input, type, sizeof (BraseroTrackType));
+ if (brasero_track_type_equal (&input, type))
+ return;
+
if (!priv->tracks)
g_signal_emit (self,
brasero_burn_session_signals [INPUT_CHANGED_SIGNAL],
Modified: trunk/src/plugins/libburnia/burn-libisofs.c
==============================================================================
--- trunk/src/plugins/libburnia/burn-libisofs.c (original)
+++ trunk/src/plugins/libburnia/burn-libisofs.c Wed Jan 14 15:44:38 2009
@@ -799,7 +799,7 @@
if (iso_image_create_burn_source (image, opts, &priv->libburn_src) >= 0) {
size = priv->libburn_src->get_size (priv->libburn_src);
brasero_job_set_output_size_for_current_track (BRASERO_JOB (self),
- BRASERO_SIZE_TO_SECTORS (size, 2048),
+ BRASERO_BYTES_TO_SECTORS (size, 2048),
size);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]