totem r5917 - in trunk: . data src/plugins/brasero-disc-recorder



Author: hadess
Date: Fri Jan 16 13:47:55 2009
New Revision: 5917
URL: http://svn.gnome.org/viewvc/totem?rev=5917&view=rev

Log:
2009-01-16  Bastien Nocera  <hadess hadess net>

	Patch from Philippe Rouquier <bonfire-app wanadoo fr> and
	Luis Medinas <lmedinas gnome org> to add a Brasero plugin

	* configure.in:
	* data/totem.ui: Add placeholders for Burn items
	* src/plugins/brasero-disc-recorder/*:
	Add Brasero plugin to allow creating VCDs from playing video
	files, and duplicate VCDs and DVDs (Closes: #565383)



Added:
   trunk/src/plugins/brasero-disc-recorder/
   trunk/src/plugins/brasero-disc-recorder/Makefile.am
   trunk/src/plugins/brasero-disc-recorder/brasero-disc-recorder.totem-plugin.in
   trunk/src/plugins/brasero-disc-recorder/totem-disc-recorder.c
Modified:
   trunk/ChangeLog
   trunk/data/totem.ui

Modified: trunk/data/totem.ui
==============================================================================
--- trunk/data/totem.ui	(original)
+++ trunk/data/totem.ui	Fri Jan 16 13:47:55 2009
@@ -434,6 +434,8 @@
             <separator/>
             <menuitem name="play" action="play"/>
             <separator/>
+            <placeholder name="burn-placeholder"/>
+            <separator/>
             <menuitem name="quit" action="quit"/>
          </menu>
          <menu name="edit" action="edit-menu">
@@ -510,6 +512,8 @@
          <menuitem name="fullscreen" action="fullscreen"/>
          <menuitem name="select-subtitle" action="select-subtitle"/>
          <separator/>
+         <placeholder name="burn-placeholder"/>
+         <separator/>
          <menu name="popup-languages" action="languages-menu">
             <placeholder name="placeholder"/>
          </menu>

Added: trunk/src/plugins/brasero-disc-recorder/Makefile.am
==============================================================================
--- (empty file)
+++ trunk/src/plugins/brasero-disc-recorder/Makefile.am	Fri Jan 16 13:47:55 2009
@@ -0,0 +1,43 @@
+modules_flags = -export_dynamic -avoid-version -module
+
+plugindir = $(PLUGINDIR)/brasero-disc-recorder
+plugin_LTLIBRARIES = libbrasero-disc-recorder.la
+
+plugin_in_files = brasero-disc-recorder.totem-plugin.in
+
+%.totem-plugin: %.totem-plugin.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
+
+plugin_DATA = $(plugin_in_files:.totem-plugin.in=.totem-plugin)
+
+common_defines = \
+	-D_REENTRANT					\
+	-DDBUS_API_SUBJECT_TO_CHANGE			\
+	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"	\
+	-DGCONF_PREFIX=\""/apps/totem"\"		\
+	-DDATADIR=\""$(datadir)"\"			\
+	-DLIBEXECDIR=\""$(libexecdir)"\"		\
+	-DBINDIR=\""$(bindir)"\"			\
+	-DTOTEM_PLUGIN_DIR=\""$(libdir)/totem/plugins"\"\
+	$(DISABLE_DEPRECATED)
+
+libbrasero_disc_recorder_la_SOURCES = totem-disc-recorder.c
+libbrasero_disc_recorder_la_LDFLAGS = $(modules_flags)
+libbrasero_disc_recorder_la_LIBADD = $(DISC_RECORDER_LIBS)
+libbrasero_disc_recorder_la_CPPFLAGS = $(common_defines)
+
+libbrasero_disc_recorder_la_CFLAGS = \
+	$(DEPENDENCY_CFLAGS)	\
+	$(WARN_CFLAGS)		\
+	$(DBUS_CFLAGS)		\
+	$(AM_CFLAGS)		\
+	$(DISC_RECORDER_CFLAGS)	\
+	-I$(top_srcdir)/	\
+	-I$(top_srcdir)/lib	\
+	-I$(top_srcdir)/src	\
+	-I$(top_srcdir)/src/plugins
+
+EXTRA_DIST = $(plugin_in_files)
+
+CLEANFILES = $(plugin_DATA) $(BUILT_SOURCES)
+DISTCLEANFILES = $(plugin_DATA)
+

Added: trunk/src/plugins/brasero-disc-recorder/brasero-disc-recorder.totem-plugin.in
==============================================================================
--- (empty file)
+++ trunk/src/plugins/brasero-disc-recorder/brasero-disc-recorder.totem-plugin.in	Fri Jan 16 13:47:55 2009
@@ -0,0 +1,9 @@
+[Totem Plugin]
+Module=brasero-disc-recorder
+IAge=1
+Builtin=false
+_Name=Video Disc Recorder
+_Description=Records (S)VCDs or video DVDs
+Authors=Philippe Rouquier
+Copyright=Copyright  2008 Philippe Rouquier
+Website=http://www.gnome.org/projects/brasero/

Added: trunk/src/plugins/brasero-disc-recorder/totem-disc-recorder.c
==============================================================================
--- (empty file)
+++ trunk/src/plugins/brasero-disc-recorder/totem-disc-recorder.c	Fri Jan 16 13:47:55 2009
@@ -0,0 +1,516 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * Copyright (C) Philippe Rouquier 2008 <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 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., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ */
+
+#include "config.h"
+
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib-object.h>
+#include <glib/gi18n-lib.h>
+#include <glib/gstdio.h>
+#include <gmodule.h>
+#include <gdk/gdkx.h>
+
+#include <libxml/xmlerror.h>
+#include <libxml/xmlwriter.h>
+#include <libxml/parser.h>
+#include <libxml/xmlstring.h>
+#include <libxml/xmlsave.h>
+
+#include "totem-plugin.h"
+#include "totem-interface.h"
+
+#define TOTEM_TYPE_DISC_RECORDER_PLUGIN		(totem_disc_recorder_plugin_get_type ())
+#define TOTEM_DISC_RECORDER_PLUGIN(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), TOTEM_TYPE_DISC_RECORDER_PLUGIN, TotemDiscRecorderPlugin))
+#define TOTEM_DISC_RECORDER_PLUGIN_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), TOTEM_TYPE_DISC_RECORDER_PLUGIN, TotemDiscRecorderPluginClass))
+#define TOTEM_IS_DISC_RECORDER_PLUGIN(o)	(G_TYPE_CHECK_INSTANCE_TYPE ((o), TOTEM_TYPE_DISC_RECORDER_PLUGIN))
+#define TOTEM_IS_DISC_RECORDER_PLUGIN_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), TOTEM_TYPE_DISC_RECORDER_PLUGIN))
+#define TOTEM_DISC_RECORDER_PLUGIN_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), TOTEM_TYPE_DISC_RECORDER_PLUGIN, TotemDiscRecorderPluginClass))
+
+typedef struct TotemDiscRecorderPluginPrivate         TotemDiscRecorderPluginPrivate;
+
+typedef struct
+{
+	TotemPlugin parent;
+
+	TotemObject *totem;
+
+	GtkActionGroup *action_group;
+	guint ui_merge_id;
+
+	gboolean enabled;
+} TotemDiscRecorderPlugin;
+
+typedef struct
+{
+	TotemPluginClass parent_class;
+} TotemDiscRecorderPluginClass;
+
+G_MODULE_EXPORT GType register_totem_plugin (GTypeModule *module);
+GType totem_disc_recorder_plugin_get_type (void) G_GNUC_CONST;
+
+TOTEM_PLUGIN_REGISTER (TotemDiscRecorderPlugin, totem_disc_recorder_plugin)
+
+static void totem_disc_recorder_plugin_burn (GtkAction *action,
+					     TotemDiscRecorderPlugin *pi);
+static void totem_disc_recorder_plugin_copy (GtkAction *action,
+					     TotemDiscRecorderPlugin *pi);
+
+static GtkActionEntry totem_disc_recorder_plugin_actions [] = {
+	{ "VideoBurnToDisc", "media-optical-video-new", N_("_Create Video Disc..."), NULL,
+		N_("Create a video DVD or a (S)VCD from the currently opened movie"),
+		G_CALLBACK (totem_disc_recorder_plugin_burn) },
+	{ "VideoDVDCopy", "media-optical-copy", N_("Copy Vide_o DVD..."), NULL,
+		N_("Copy the currently playing video DVD"),
+		G_CALLBACK (totem_disc_recorder_plugin_copy) },
+	{ "VideoVCDCopy", "media-optical-copy", N_("Copy Vide_o (S)VCD..."), NULL,
+		N_("Copy the currently playing (S)VCD"),
+		G_CALLBACK (totem_disc_recorder_plugin_copy) },
+};
+
+static gboolean
+totem_disc_recorder_plugin_start_burning (TotemDiscRecorderPlugin *pi,
+					  const char *path,
+					  gboolean copy)
+{
+	GtkWindow *main_window;
+	GPtrArray *array;
+	char **args, *xid_str;
+	GError *error = NULL;
+	gboolean ret;
+
+	array = g_ptr_array_new ();
+	g_ptr_array_add (array, "brasero");
+	if (copy != FALSE)
+		g_ptr_array_add (array, "-c");
+	else
+		g_ptr_array_add (array, "-r");
+	g_ptr_array_add (array, (gpointer) path);
+
+	main_window = totem_get_main_window (pi->totem);
+	if (main_window && GTK_WIDGET (main_window)->window) {
+		int xid;
+		xid = gdk_x11_drawable_get_xid (GDK_DRAWABLE (GTK_WIDGET (main_window)->window));
+		xid_str = g_strdup_printf ("%d", xid);
+		g_ptr_array_add (array, "-x");
+		g_ptr_array_add (array, xid_str);
+	} else {
+		xid_str = NULL;
+	}
+
+	g_ptr_array_add (array, NULL);
+	args = (char **) g_ptr_array_free (array, FALSE);
+
+	ret = TRUE;
+	if (!g_spawn_async (NULL, args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error)) {
+		if (copy != FALSE) {
+			totem_interface_error (_("The video disc could not be duplicated."),
+					       error->message,
+					       totem_get_main_window (pi->totem));
+		} else {
+			totem_interface_error (_("The movie could not be recorded."),
+					       error->message,
+					       totem_get_main_window (pi->totem));
+		}
+		ret = FALSE;
+		g_error_free (error);
+	}
+
+	g_free (xid_str);
+	g_free (args);
+
+	return ret;
+}
+
+static char*
+totem_disc_recorder_plugin_write_video_project (TotemDiscRecorderPlugin *pi,
+						char **error)
+{
+	xmlTextWriter *project;
+	xmlDocPtr doc = NULL;
+	xmlSaveCtxt *save;
+	xmlChar *escaped;
+	gint success;
+	char *title, *path, *uri;
+	int fd;
+
+	/* get a temporary path */
+	path = g_build_filename (g_get_tmp_dir (), "brasero-tmp-project-XXXXXX",  NULL);
+	fd = g_mkstemp (path);
+	if (!fd) {
+		g_free (path);
+
+		*error = g_strdup (_("Unable to write a project."));
+		return NULL;
+	}
+
+	project = xmlNewTextWriterDoc (&doc, 0);
+	if (!project) {
+		g_remove (path);
+		g_free (path);
+		close (fd);
+
+		*error = g_strdup (_("Unable to write a project."));
+		return NULL;
+	}
+
+	xmlTextWriterSetIndent (project, 1);
+	xmlTextWriterSetIndentString (project, (xmlChar *) "\t");
+
+	success = xmlTextWriterStartDocument (project,
+					      NULL,
+					      "UTF8",
+					      NULL);
+	if (success < 0)
+		goto error;
+
+	success = xmlTextWriterStartElement (project, (xmlChar *) "braseroproject");
+	if (success < 0)
+		goto error;
+
+	/* write the name of the version */
+	success = xmlTextWriterWriteElement (project,
+					     (xmlChar *) "version",
+					     (xmlChar *) "0.2");
+	if (success < 0)
+		goto error;
+
+	title = totem_get_short_title (pi->totem);
+	if (title) {
+		success = xmlTextWriterWriteElement (project,
+						     (xmlChar *) "label",
+						     (xmlChar *) title);
+		g_free (title);
+
+		if (success < 0)
+			goto error;
+	}
+
+	success = xmlTextWriterStartElement (project, (xmlChar *) "track");
+	if (success < 0)
+		goto error;
+
+	success = xmlTextWriterStartElement (project, (xmlChar *) "video");
+	if (success < 0)
+		goto error;
+
+	uri = totem_get_current_mrl (pi->totem);
+	escaped = (unsigned char *) g_uri_escape_string (uri, NULL, FALSE);
+	g_free (uri);
+
+	success = xmlTextWriterWriteElement (project,
+					     (xmlChar *) "uri",
+					     escaped);
+	g_free (escaped);
+	if (success == -1)
+		goto error;
+
+	/* start of the song always 0 */
+	success = xmlTextWriterWriteElement (project,
+					     (xmlChar *) "start",
+					     (xmlChar *) "0");
+	if (success == -1)
+		goto error;
+
+	success = xmlTextWriterEndElement (project); /* video */
+	if (success < 0)
+		goto error;
+
+	success = xmlTextWriterEndElement (project); /* track */
+	if (success < 0)
+		goto error;
+
+	success = xmlTextWriterEndElement (project); /* braseroproject */
+	if (success < 0)
+		goto error;
+
+	xmlTextWriterEndDocument (project);
+	xmlFreeTextWriter (project);
+
+	save = xmlSaveToFd (fd, "UTF8", XML_SAVE_FORMAT);
+	xmlSaveDoc (save, doc);
+	xmlSaveClose (save);
+
+	xmlFreeDoc (doc);
+	close (fd);
+
+	return path;
+
+error:
+
+	/* cleanup */
+	xmlTextWriterEndDocument (project);
+	xmlFreeTextWriter (project);
+
+	g_remove (path);
+	g_free (path);
+	close (fd);
+
+	*error = g_strdup (_("Unable to write a project."));
+	return NULL;
+}
+
+static void
+totem_disc_recorder_plugin_burn (GtkAction *action,
+				 TotemDiscRecorderPlugin *pi)
+{
+	char *path;
+	char *error = NULL;
+
+	path = totem_disc_recorder_plugin_write_video_project (pi, &error);
+	if (!path) {
+		totem_interface_error (_("The movie could not be recorded."),
+				       error,
+				       totem_get_main_window (pi->totem));
+		g_free (error);
+		return;
+	}
+
+	if (!totem_disc_recorder_plugin_start_burning (pi, path, FALSE))
+		g_remove (path);
+
+	g_free (path);
+}
+
+static void
+totem_disc_recorder_plugin_copy (GtkAction *action,
+				 TotemDiscRecorderPlugin *pi)
+{
+	char *mrl;
+
+	mrl = totem_get_current_mrl (pi->totem);
+	if (!g_str_has_prefix (mrl, "dvd:") && !g_str_has_prefix (mrl, "vcd:")) {
+		g_free (mrl);
+		g_assert_not_reached ();
+		return;
+	}
+
+	totem_disc_recorder_plugin_start_burning (pi, mrl + 6, TRUE);
+}
+
+static void
+totem_disc_recorder_file_closed (TotemObject *totem,
+				 TotemDiscRecorderPlugin *pi)
+{
+	GtkAction *action;
+
+	action = gtk_action_group_get_action (pi->action_group, "VideoBurnToDisc");
+	gtk_action_set_visible (action, FALSE);
+	action = gtk_action_group_get_action (pi->action_group, "VideoDVDCopy");
+	gtk_action_set_visible (action, FALSE);
+	action = gtk_action_group_get_action (pi->action_group, "VideoVCDCopy");
+	gtk_action_set_visible (action, FALSE);
+}
+
+static void
+totem_disc_recorder_file_opened (TotemObject *totem,
+				 const char *mrl,
+				 TotemDiscRecorderPlugin *pi)
+{
+	GtkAction *action;
+
+	/* Check if that stream is supported by brasero */
+	if (g_str_has_prefix (mrl, "file:")) {
+		/* If the file is supported we can always burn, even if there
+		 * aren't any burner since we can still create an image. */
+		action = gtk_action_group_get_action (pi->action_group, "VideoBurnToDisc");
+		gtk_action_set_visible (action, TRUE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoDVDCopy");
+		gtk_action_set_visible (action, FALSE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoVCDCopy");
+		gtk_action_set_visible (action, FALSE);
+	}
+	else if (g_str_has_prefix (mrl, "dvd:")) {
+		action = gtk_action_group_get_action (pi->action_group, "VideoBurnToDisc");
+		gtk_action_set_visible (action, FALSE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoDVDCopy");
+		gtk_action_set_visible (action, TRUE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoVCDCopy");
+		gtk_action_set_visible (action, FALSE);
+	}
+	else if (g_str_has_prefix (mrl, "vcd:")) {
+		action = gtk_action_group_get_action (pi->action_group, "VideoBurnToDisc");
+		gtk_action_set_visible (action, FALSE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoDVDCopy");
+		gtk_action_set_visible (action, FALSE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoVCDCopy");
+		gtk_action_set_visible (action, TRUE);
+	}
+	else {
+		action = gtk_action_group_get_action (pi->action_group, "VideoBurnToDisc");
+		gtk_action_set_visible (action, FALSE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoDVDCopy");
+		gtk_action_set_visible (action, FALSE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoVCDCopy");
+		gtk_action_set_visible (action, FALSE);
+	}
+}
+
+static gboolean
+impl_activate (TotemPlugin *plugin, TotemObject *totem, GError **error)
+{
+	TotemDiscRecorderPlugin *pi = TOTEM_DISC_RECORDER_PLUGIN (plugin);
+	GtkUIManager *uimanager = NULL;
+	GtkAction *action;
+	char *path;
+
+	/* make sure brasero is in the path */
+	path = g_find_program_in_path ("brasero");
+	if (!path)
+		return FALSE;
+	g_free (path);
+
+	//FIXME this shouldn't be necessary
+#if 0
+	/* Set up to use brasero icons */
+	path = g_build_path (G_DIR_SEPARATOR_S, LIBBRASERO_MEDIA_INSTALL, "/share/brasero/icons", NULL);
+	gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), path);
+	g_free (path);
+#endif
+
+	pi->totem = totem;
+
+	g_signal_connect (totem,
+			  "file-opened",
+			  G_CALLBACK (totem_disc_recorder_file_opened),
+			  plugin);
+	g_signal_connect (totem,
+			  "file-closed",
+			  G_CALLBACK (totem_disc_recorder_file_closed),
+			  plugin);
+
+	/* add UI */
+	pi->action_group = gtk_action_group_new ("DiscRecorderActions");
+	gtk_action_group_set_translation_domain (pi->action_group, GETTEXT_PACKAGE);
+	gtk_action_group_add_actions (pi->action_group,
+				      totem_disc_recorder_plugin_actions,
+				      G_N_ELEMENTS (totem_disc_recorder_plugin_actions),
+				      pi);
+
+	uimanager = totem_get_ui_manager (totem);
+	gtk_ui_manager_insert_action_group (uimanager, pi->action_group, -1);
+	g_object_unref (pi->action_group);
+
+	pi->ui_merge_id = gtk_ui_manager_new_merge_id (uimanager);
+
+	gtk_ui_manager_add_ui (uimanager,
+			       pi->ui_merge_id,
+			       "/ui/tmw-menubar/movie/burn-placeholder",
+			       "VideoBurnToDisc",
+			       "VideoBurnToDisc",
+			       GTK_UI_MANAGER_MENUITEM,
+			       TRUE);
+	gtk_ui_manager_add_ui (uimanager,
+			       pi->ui_merge_id,
+			       "/ui/totem-main-popup/burn-placeholder",
+			       "VideoBurnToDisc",
+			       "VideoBurnToDisc",
+			       GTK_UI_MANAGER_MENUITEM,
+			       TRUE);
+
+	gtk_ui_manager_add_ui (uimanager,
+			       pi->ui_merge_id,
+			       "/ui/tmw-menubar/movie/burn-placeholder",
+			       "VideoDVDCopy",
+			       "VideoDVDCopy",
+			       GTK_UI_MANAGER_MENUITEM,
+			       TRUE);
+	gtk_ui_manager_add_ui (uimanager,
+			       pi->ui_merge_id,
+			       "/ui/totem-main-popup/burn-placeholder",
+			       "VideoDVDCopy",
+			       "VideoDVDCopy",
+			       GTK_UI_MANAGER_MENUITEM,
+			       TRUE);
+
+	gtk_ui_manager_add_ui (uimanager,
+			       pi->ui_merge_id,
+			       "/ui/tmw-menubar/movie/burn-placeholder",
+			       "VideoVCDCopy",
+			       "VideoVCDCopy",
+			       GTK_UI_MANAGER_MENUITEM,
+			       TRUE);
+	gtk_ui_manager_add_ui (uimanager,
+			       pi->ui_merge_id,
+			       "/ui/totem-main-popup/burn-placeholder",
+			       "VideoVCDCopy",
+			       "VideoVCDCopy",
+			       GTK_UI_MANAGER_MENUITEM,
+			       TRUE);
+
+	if (!totem_is_paused (totem) && !totem_is_playing (totem)) {
+		action = gtk_action_group_get_action (pi->action_group, "VideoBurnToDisc");
+		gtk_action_set_visible (action, FALSE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoDVDCopy");
+		gtk_action_set_visible (action, FALSE);
+		action = gtk_action_group_get_action (pi->action_group, "VideoVCDCopy");
+		gtk_action_set_visible (action, FALSE);	}
+	else {
+		char *mrl;
+
+		mrl = totem_get_current_mrl (totem);
+		totem_disc_recorder_file_opened (totem, mrl, pi);
+		g_free (mrl);
+	}
+
+	return TRUE;
+}
+
+static void
+impl_deactivate (TotemPlugin *plugin, TotemObject *totem)
+{
+	TotemDiscRecorderPlugin *pi = TOTEM_DISC_RECORDER_PLUGIN (plugin);
+	GtkUIManager *uimanager = NULL;
+
+	pi->enabled = FALSE;
+
+	g_signal_handlers_disconnect_by_func (totem, totem_disc_recorder_file_opened, plugin);
+	g_signal_handlers_disconnect_by_func (totem, totem_disc_recorder_file_closed, plugin);
+
+	uimanager = totem_get_ui_manager (totem);
+	gtk_ui_manager_remove_ui (uimanager, pi->ui_merge_id);
+	gtk_ui_manager_remove_action_group (uimanager, pi->action_group);
+
+	pi->totem = NULL;
+}
+
+static void
+totem_disc_recorder_plugin_finalize (GObject *object)
+{
+	G_OBJECT_CLASS (totem_disc_recorder_plugin_parent_class)->finalize (object);
+}
+
+static void
+totem_disc_recorder_plugin_class_init (TotemDiscRecorderPluginClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	TotemPluginClass *plugin_class = TOTEM_PLUGIN_CLASS (klass);
+
+	object_class->finalize = totem_disc_recorder_plugin_finalize;
+
+	plugin_class->activate = impl_activate;
+	plugin_class->deactivate = impl_deactivate;
+}
+
+static void
+totem_disc_recorder_plugin_init (TotemDiscRecorderPlugin *pi)
+{
+}
+



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