Index: totem/src/totem-private.h
===================================================================
--- totem/src/totem-private.h	(revision 4401)
+++ totem/src/totem-private.h	(working copy)
@@ -34,6 +34,7 @@
 #include <libgnomevfs/gnome-vfs.h>
 
 #include "totem-playlist.h"
+#include "totem-fullscreen.h"
 #include "bacon-message-connection.h"
 #include "bacon-video-widget.h"
 #include "totem-open-location.h"
@@ -115,7 +116,6 @@
 	/* Volume */
 	GtkWidget *volume;
 	gboolean vol_lock;
-	gboolean vol_fs_lock;
 	gfloat prev_volume;
 	int volume_first_time;
 	gboolean volume_sensitive;
@@ -126,24 +126,12 @@
 	GList *subtitles_list;
 	GList *language_list;
 
-	/* exit fullscreen Popup */
-	GtkWidget *exit_popup;
+	/* Fullscreen */
+	TotemFullscreen *fs;
 
 	/* controls management */
 	ControlsVisibility controls_visibility;
 
-	/* control fullscreen Popup */
-	GtkWidget *control_popup;
-	GtkWidget *fs_seek;
-	GtkAdjustment *fs_seekadj;
-	GtkWidget *fs_volume;
-	GtkAdjustment *fs_voladj;
-	GtkWidget *tcw_time_label;
-
-	guint popup_timeout;
-	gboolean popup_in_progress;
-	GdkRectangle fullscreen_rect;
-
 	/* Stream info */
 	gint64 stream_length;
 
@@ -172,7 +160,6 @@
 	GConfClient *gc;
 	BaconMessageConnection *conn;
 	TotemStates state;
-	gboolean cursor_shown;
 	TotemOpenLocation *open_location;
 };
 
Index: totem/src/Makefile.am
===================================================================
--- totem/src/Makefile.am	(revision 4401)
+++ totem/src/Makefile.am	(working copy)
@@ -59,9 +59,12 @@
 	totem-statusbar.h		\
 	totem-interface.c		\
 	totem-interface.h		\
+	totem-fullscreen.c		\
+	totem-fullscreen.h		\
 	$(BACON_VOLUME)
 
 libtotem_player_la_CPPFLAGS = \
+	-I$(srcdir)/plparse	\
 	-I$(srcdir)/backend	\
 	$(common_defines)	\
 	$(AM_CPPFLAGS)
Index: totem/src/totem.c
===================================================================
--- totem/src/totem.c	(revision 4401)
+++ totem/src/totem.c	(working copy)
@@ -83,8 +83,6 @@
 #define ZOOM_DISABLE (ZOOM_LOWER - 1)
 #define ZOOM_ENABLE (ZOOM_UPPER + 1)
 
-#define FULLSCREEN_POPUP_TIMEOUT 5 * 1000
-
 #define BVW_VBOX_BORDER_WIDTH 1
 
 static const GtkTargetEntry target_table[] = {
@@ -94,14 +92,10 @@
 
 static gboolean totem_action_open_files (Totem *totem, char **list);
 static gboolean totem_action_open_files_list (Totem *totem, GSList *list);
-static void update_fullscreen_size (Totem *totem);
-static gboolean popup_hide (Totem *totem);
 static void update_buttons (Totem *totem);
 static void update_media_menu_items (Totem *totem);
 static void playlist_changed_cb (GtkWidget *playlist, Totem *totem);
 static void play_pause_set_label (Totem *totem, TotemStates state);
-static gboolean on_video_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, Totem *totem);
-static void popup_timeout_remove (Totem *totem);
 
 static void
 long_action (void)
@@ -188,9 +182,6 @@
 {
 	GdkDisplay *display = NULL;
 
-	if (totem != NULL)
-		popup_timeout_remove (totem);
-
 	if (gtk_main_level () > 0)
 		gtk_main_quit ();
 
@@ -231,6 +222,9 @@
 	if (totem->win)
 		gtk_widget_destroy (GTK_WIDGET (totem->win));
 
+	if (totem->fs)
+		g_object_unref (totem->fs);
+
 	g_object_unref (totem);
 
 	gnome_vfs_shutdown ();
@@ -589,13 +583,6 @@
 	}
 }
 
-static void
-totem_action_set_cursor (Totem *totem, gboolean state)
-{
-	totem->cursor_shown = state;
-	bacon_video_widget_set_show_cursor (totem->bvw, state);
-}
-
 static gboolean
 window_state_event_cb (GtkWidget *window, GdkEventWindowState *event,
 		       Totem *totem)
@@ -616,9 +603,7 @@
 	if (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) {
 		if (totem->controls_visibility != TOTEM_CONTROLS_UNDEFINED)
 			totem_action_save_size (totem);
-		update_fullscreen_size (totem);
-		bacon_video_widget_set_fullscreen (totem->bvw, TRUE);
-		totem_action_set_cursor (totem, FALSE);
+		totem_fullscreen_set_fullscreen (totem->fs, TRUE);
 
 		totem->controls_visibility = TOTEM_CONTROLS_FULLSCREEN;
 		show_controls (totem, FALSE);
@@ -626,9 +611,7 @@
 	} else {
 		GtkAction *action;
 
-		popup_hide (totem);
-		bacon_video_widget_set_fullscreen (totem->bvw, FALSE);
-		totem_action_set_cursor (totem, TRUE);
+		totem_fullscreen_set_fullscreen (totem->fs, FALSE);
 
 		action = gtk_action_group_get_action (totem->main_action_group,
 				"show-controls");
@@ -814,13 +797,9 @@
 update_mrl_label (Totem *totem, const char *name)
 {
 	gint time;
-	char *text;
-	GtkWidget *widget;
 
 	if (name != NULL)
 	{
-		char *escaped;
-
 		/* Get the length of the stream */
 		time = bacon_video_widget_get_stream_length (totem->bvw);
 		totem_statusbar_set_time_and_length (TOTEM_STATUSBAR
@@ -829,16 +808,8 @@
 		g_object_notify (G_OBJECT (totem), "stream-length");
 
 		/* Update the mrl label */
-		escaped = g_markup_escape_text (name, strlen (name));
-		text = g_strdup_printf
-			("<span size=\"medium\"><b>%s</b></span>", escaped);
-		g_free (escaped);
+		totem_fullscreen_set_title (totem->fs, name);
 
-		widget = glade_xml_get_widget (totem->xml, "tcw_title_label");
-		gtk_label_set_markup (GTK_LABEL (widget), text);
-
-		g_free (text);
-
 		/* Title */
 		gtk_window_set_title (GTK_WINDOW (totem->win), name);
 	} else {
@@ -850,14 +821,8 @@
 		g_object_notify (G_OBJECT (totem), "stream-length");
 
 		/* Update the mrl label */
-		text = g_strdup_printf
-			("<span size=\"medium\"><b>%s</b></span>",
-			 _("No File"));
-		widget = glade_xml_get_widget (totem->xml, "tcw_title_label");
-		gtk_label_set_markup (GTK_LABEL (widget), text);
+		totem_fullscreen_set_title (totem->fs, NULL);
 
-		g_free (text);
-
 		/* Title */
 		gtk_window_set_title (GTK_WINDOW (totem->win), _("Totem Movie Player"));
 	}
@@ -888,16 +853,16 @@
 		totem_action_set_sensitivity ("play", FALSE);
 
 		/* Volume */
-		totem_main_set_sensitivity ("tcw_volume_button", FALSE);
+		totem_main_set_sensitivity ("tmw_volume_button", FALSE);
 		totem_action_set_sensitivity ("volume-up", FALSE);
 		totem_action_set_sensitivity ("volume-down", FALSE);
 		totem->volume_sensitive = FALSE;
 
 		/* Control popup */
-		gtk_widget_set_sensitive (totem->fs_seek, FALSE);
+		totem_fullscreen_set_can_set_volume (totem->fs, FALSE);
+		totem_fullscreen_set_seekable (totem->fs, FALSE);
 		totem_action_set_sensitivity ("next-chapter", FALSE);
 		totem_action_set_sensitivity ("previous-chapter", FALSE);
-		totem_main_set_sensitivity ("tcw_volume_hbox", FALSE);
 
 		/* Take a screenshot */
 		totem_action_set_sensitivity ("take-screenshot", FALSE);
@@ -927,8 +892,8 @@
 
 		/* Volume */
 		caps = bacon_video_widget_can_set_volume (totem->bvw);
-		totem_main_set_sensitivity ("tcw_volume_button", caps);
-		totem_main_set_sensitivity ("tcw_volume_hbox", caps);
+		totem_main_set_sensitivity ("tmw_volume_button", caps);
+		totem_fullscreen_set_can_set_volume (totem->fs, caps);
 		totem_action_set_sensitivity ("volume-up", caps && totem->prev_volume < 100);
 		totem_action_set_sensitivity ("volume-down", caps && totem->prev_volume > 0);
 		totem->volume_sensitive = caps;
@@ -1479,11 +1444,10 @@
 
 	/* Check if the stream is seekable */
 	gtk_widget_set_sensitive (totem->seek, seekable);
-	gtk_widget_set_sensitive (totem->fs_seek, seekable);
 
 	totem_main_set_sensitivity ("tmw_seek_hbox", seekable);
 
-	totem_main_set_sensitivity ("tcw_time_hbox", seekable);
+	totem_fullscreen_set_seekable (totem->fs, seekable);
 
 	totem_action_set_sensitivity ("skip-forward", seekable);
 	totem_action_set_sensitivity ("skip-backwards", seekable);
@@ -1502,7 +1466,7 @@
 	{
 		gtk_adjustment_set_value (totem->seekadj,
 				current_position * 65535);
-		gtk_adjustment_set_value (totem->fs_seekadj,
+		gtk_adjustment_set_value (totem->fs->seekadj,
 				current_position * 65535);
 
 		if (stream_length == 0 && totem->mrl != NULL)
@@ -1517,8 +1481,8 @@
 				(int) (stream_length / 1000));
 		}
 
-		totem_time_label_set_time
-			(TOTEM_TIME_LABEL (totem->tcw_time_label),
+		totem_time_label_set_time 
+			(TOTEM_TIME_LABEL (totem->fs->time_label),
 			 current_time, stream_length);
 	}
 
@@ -1528,20 +1492,6 @@
 	}
 }
 
-static gboolean
-vol_slider_pressed_cb (GtkWidget *widget, GdkEventButton *event, Totem *totem)
-{
-	totem->vol_fs_lock = TRUE;
-	return FALSE;
-}
-
-static gboolean
-vol_slider_released_cb (GtkWidget *widget, GdkEventButton *event, Totem *totem)
-{
-	totem->vol_fs_lock = FALSE;
-	return FALSE;
-}
-
 static void
 update_volume_sliders (Totem *totem)
 {
@@ -1556,7 +1506,7 @@
 		totem->volume_first_time = 0;
 		bacon_volume_button_set_value (
 			BACON_VOLUME_BUTTON (totem->volume), (float) volume);
-		gtk_adjustment_set_value (totem->fs_voladj,
+		gtk_adjustment_set_value (totem->fs->voladj,
 				(float) volume);
 
 		action = gtk_action_group_get_action (totem->main_action_group, "volume-down");
@@ -1594,7 +1544,8 @@
 {
 	totem->seek_lock = TRUE;
 	totem_statusbar_set_seeking (TOTEM_STATUSBAR (totem->statusbar), TRUE);
-	totem_time_label_set_seeking (TOTEM_TIME_LABEL (totem->tcw_time_label), TRUE);
+	totem_time_label_set_seeking (TOTEM_TIME_LABEL (totem->fs->time_label),
+				      TRUE);
 
 	return FALSE;
 }
@@ -1613,8 +1564,8 @@
 	totem_statusbar_set_time_and_length (TOTEM_STATUSBAR (totem->statusbar),
 			(int) (pos * time / 1000), time / 1000);
 	totem_time_label_set_time
-			(TOTEM_TIME_LABEL (totem->tcw_time_label),
-			 (int) (pos * time), time);
+		(TOTEM_TIME_LABEL (totem->fs->time_label),
+		 (int) (pos * time), time);
 
 	if (bacon_video_widget_can_direct_seek (totem->bvw) != FALSE)
 		totem_action_seek (totem, pos);
@@ -1627,7 +1578,7 @@
 	gdouble val;
 
 	adj = gtk_range_get_adjustment (GTK_RANGE (widget));
-	other_adj = (adj == totem->seekadj) ? totem->fs_seekadj : totem->seekadj;
+	other_adj = (adj == totem->seekadj) ? totem->fs->seekadj : totem->seekadj;
 
 	/* set to FALSE here to avoid triggering a final seek when
 	 * syncing the adjustments while being in direct seek mode */
@@ -1643,8 +1594,9 @@
 	}
 
 	totem_statusbar_set_seeking (TOTEM_STATUSBAR (totem->statusbar), FALSE);
-	totem_time_label_set_seeking (TOTEM_TIME_LABEL (totem->tcw_time_label),
-			FALSE);
+	totem_time_label_set_seeking (TOTEM_TIME_LABEL (totem->fs->time_label),
+				      FALSE);
+
 	return FALSE;
 }
 
@@ -1658,19 +1610,19 @@
 		if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "fs")) != FALSE)
 		{
 			bacon_video_widget_set_volume
-				(totem->bvw, (gint) totem->fs_voladj->value);
+				(totem->bvw, (gint) totem->fs->voladj->value);
 
-			/* Update the fullscreen volume adjustment */
+			/* Update the volume adjustment */
 			bacon_volume_button_set_value (
 				BACON_VOLUME_BUTTON (totem->volume),
-				gtk_adjustment_get_value (totem->fs_voladj));
+				gtk_adjustment_get_value (totem->fs->voladj));
 		} else {
 			int value = bacon_volume_button_get_value (
 				BACON_VOLUME_BUTTON (totem->volume));
 
 			bacon_video_widget_set_volume (totem->bvw, value);
-			/* Update the volume adjustment */
-			gtk_adjustment_set_value (totem->fs_voladj, value);
+			/* Update the fullscreen volume adjustment */
+			gtk_adjustment_set_value (totem->fs->voladj, value);
 		}
 
 		totem->vol_lock = FALSE;
@@ -1894,18 +1846,6 @@
 		bacon_video_widget_dvd_event (totem->bvw, BVW_DVD_NEXT_ANGLE);
 }
 
-static void
-on_volume_mute_button (GtkButton *button, Totem *totem)
-{
-	totem_action_volume_relative (totem, -100);
-}
-
-static void
-on_volume_max_button (GtkButton *button, Totem *totem)
-{
-	totem_action_volume_relative (totem, 100);
-}
-
 void
 totem_action_remote (Totem *totem, TotemRemoteCommand cmd, const char *url)
 {
@@ -2061,7 +2001,7 @@
 
 	if (handled != FALSE &&
 			gtk_window_is_active (GTK_WINDOW (totem->win))) {
-		on_video_motion_notify_event (NULL, NULL, totem);
+		totem_fullscreen_motion_notify (NULL, NULL, totem->fs);
 	}
 }
 
@@ -2151,18 +2091,6 @@
 			NULL, NULL, totem);
 }
 
-static void
-update_fullscreen_size (Totem *totem)
-{
-	GdkScreen *screen;
-
-	screen = gtk_window_get_screen (GTK_WINDOW (totem->win));
-	gdk_screen_get_monitor_geometry (screen,
-			gdk_screen_get_monitor_at_window
-			(screen, totem->win->window),
-			&totem->fullscreen_rect);
-}
-
 gboolean
 totem_is_fullscreen (Totem *totem)
 {
@@ -2194,154 +2122,12 @@
 }
 
 static void
-move_popups (Totem *totem)
-{
-	int control_width, control_height;
-	int exit_width, exit_height;
-
-	update_fullscreen_size (totem);
-
-	gtk_window_get_size (GTK_WINDOW (totem->control_popup),
-			&control_width, &control_height);
-	gtk_window_get_size (GTK_WINDOW (totem->exit_popup),
-			&exit_width, &exit_height);
-
-	/* We take the full width of the screen */
-	gtk_window_resize (GTK_WINDOW (totem->control_popup),
-			totem->fullscreen_rect.width,
-			control_height);
-
-	if (gtk_widget_get_direction (totem->exit_popup) == GTK_TEXT_DIR_RTL)
-	{
-		gtk_window_move (GTK_WINDOW (totem->exit_popup),
-				totem->fullscreen_rect.x,
-				totem->fullscreen_rect.y);
-		gtk_window_move (GTK_WINDOW (totem->control_popup),
-				totem->fullscreen_rect.width - control_width,
-				totem->fullscreen_rect.height + totem->fullscreen_rect.y - control_height);
-	} else {
-		gtk_window_move (GTK_WINDOW (totem->exit_popup),
-				totem->fullscreen_rect.width + totem->fullscreen_rect.x - exit_width,
-				totem->fullscreen_rect.y);
-		gtk_window_move (GTK_WINDOW (totem->control_popup),
-				totem->fullscreen_rect.x,
-				totem->fullscreen_rect.height + totem->fullscreen_rect.y - control_height);
-	}
-}
-
-static void
-size_changed_cb (GdkScreen *screen, Totem *totem)
-{
-	move_popups (totem);
-}
-
-static void
-theme_changed_cb (GtkIconTheme *icon_theme, Totem *totem)
-{
-	move_popups (totem);
-}
-
-static void
-window_realize_cb (GtkWidget *widget, Totem *totem)
-{
-	GdkScreen *screen;
-
-	screen = gtk_widget_get_screen (widget);
-	g_signal_connect (G_OBJECT (screen), "size-changed",
-			G_CALLBACK (size_changed_cb), totem);
-	g_signal_connect (G_OBJECT (gtk_icon_theme_get_for_screen (screen)),
-			"changed", G_CALLBACK (theme_changed_cb), totem);
-}
-
-static void
-window_unrealize_cb (GtkWidget *widget, Totem *totem)
-{
-	GdkScreen *screen;
-
-	screen = gtk_widget_get_screen (widget);
-	g_signal_handlers_disconnect_by_func
-		(screen, G_CALLBACK (size_changed_cb), totem);
-	g_signal_handlers_disconnect_by_func
-		(gtk_icon_theme_get_for_screen (screen),
-		 G_CALLBACK (theme_changed_cb), totem);
-}
-
-static void
-popup_timeout_add(Totem* totem)
-{
-	totem->popup_timeout = g_timeout_add (FULLSCREEN_POPUP_TIMEOUT,
-		(GSourceFunc) popup_hide, totem);
-}
-
-static void
-popup_timeout_remove (Totem *totem)
-{
-	if (totem->popup_timeout != 0)
-	{
-		g_source_remove (totem->popup_timeout);
-		totem->popup_timeout = 0;
-	}
-}
-
-static gboolean
-popup_hide (Totem *totem)
-{
-	if (totem->bvw == NULL || totem_is_fullscreen (totem) == FALSE)
-		return TRUE;
-
-	if (totem->seek_lock != FALSE || totem->vol_fs_lock != FALSE)
-		return TRUE;
-
-	gtk_widget_hide (GTK_WIDGET (totem->exit_popup));
-	gtk_widget_hide (GTK_WIDGET (totem->control_popup));
-
-	popup_timeout_remove (totem);
-
-	totem_action_set_cursor (totem, FALSE);
-
-	return FALSE;
-}
-
-static void
 on_mouse_click_fullscreen (GtkWidget *widget, Totem *totem)
 {
-	popup_timeout_remove (totem);
-	popup_timeout_add (totem);
+	totem_fullscreen_motion_notify (NULL, NULL, totem->fs);
 }
 
 static gboolean
-on_video_motion_notify_event (GtkWidget *widget, GdkEventMotion *event,
-		Totem *totem)
-{
-	GtkWidget *item;
-
-	if (totem_is_fullscreen (totem) == FALSE) 
-		return FALSE;
-
-	if (totem->popup_in_progress != FALSE)
-		return FALSE;
-
-	totem->popup_in_progress = TRUE;
-
-	popup_timeout_remove (totem);
-
-	item = glade_xml_get_widget (totem->xml, "tcw_hbox");
-	gtk_widget_show_all (item);
-	gdk_flush ();
-
-	move_popups (totem);
-
-	gtk_widget_show_all (totem->exit_popup);
-	gtk_widget_show_all (totem->control_popup);
-	totem_action_set_cursor (totem, TRUE);
-
-	popup_timeout_add (totem);
-	totem->popup_in_progress = FALSE;
-
-	return FALSE;
-}
-
-static gboolean
 on_video_button_press_event (BaconVideoWidget *bvw, GdkEventButton *event,
 		Totem *totem)
 {
@@ -2681,7 +2467,7 @@
 {
 	gboolean retval = TRUE;
 
-	on_video_motion_notify_event (NULL, NULL, totem);
+	totem_fullscreen_motion_notify (NULL, NULL, totem->fs);
 
 	switch (direction) {
 	case GDK_SCROLL_UP:
@@ -2704,7 +2490,7 @@
 {
 	gboolean retval = TRUE;
 
-	on_video_motion_notify_event (NULL, NULL, totem);
+	totem_fullscreen_motion_notify (NULL, NULL, totem->fs);
 
 	switch (direction) {
 	case GDK_SCROLL_UP:
@@ -3015,77 +2801,40 @@
 	/* Main Window */
 	g_signal_connect (G_OBJECT (totem->win), "delete-event",
 			G_CALLBACK (main_window_destroy_cb), totem);
-	g_object_notify (G_OBJECT (totem->win), "is-active");
-	g_signal_connect_swapped (G_OBJECT (totem->win), "notify",
-			G_CALLBACK (popup_hide), totem);
 	g_signal_connect (G_OBJECT (totem->win), "window-state-event",
 			G_CALLBACK (window_state_event_cb), totem);
 
-	/* Screen size and Theme changes */
-	g_signal_connect (totem->win, "realize",
-			G_CALLBACK (window_realize_cb), totem);
-	g_signal_connect (totem->win, "unrealize",
-			G_CALLBACK (window_unrealize_cb), totem);
+	/* Fullscreen window buttons */
+	g_signal_connect (G_OBJECT (totem->fs->exit_button), "clicked",
+			  G_CALLBACK (on_fs_exit1_activate), totem);
 
-	/* Motion notify for the Popups */
-	item = glade_xml_get_widget (totem->xml,
-			"totem_exit_fullscreen_window");
-	gtk_widget_add_events (item, GDK_POINTER_MOTION_MASK);
-	g_signal_connect (G_OBJECT (item), "motion-notify-event",
-			G_CALLBACK (on_video_motion_notify_event), totem);
-	item = glade_xml_get_widget (totem->xml, "totem_controls_window");
-	gtk_widget_add_events (item, GDK_POINTER_MOTION_MASK);
-	g_signal_connect (G_OBJECT (item), "motion-notify-event",
-			G_CALLBACK (on_video_motion_notify_event), totem);
-
-	/* Popup */
-	item = glade_xml_get_widget (totem->xml, "tefw_fs_exit_button");
-	g_signal_connect (G_OBJECT (item), "clicked",
-			G_CALLBACK (on_fs_exit1_activate), totem);
-	g_signal_connect (G_OBJECT (item), "motion-notify-event",
-			G_CALLBACK (on_video_motion_notify_event), totem);
-
-	/* Control Popup */
-	box = glade_xml_get_widget (totem->xml, "tcw_buttons_hbox");
-
 	action = gtk_action_group_get_action (totem->main_action_group, "play");
 	item = gtk_action_create_tool_item (action);
-	gtk_box_pack_start (GTK_BOX (box), item, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (totem->fs->buttons_box), item, FALSE, FALSE, 0);
 	g_signal_connect (G_OBJECT (item), "clicked",
 			G_CALLBACK (on_mouse_click_fullscreen), totem);
 
 	action = gtk_action_group_get_action (totem->main_action_group, "previous-chapter");
 	item = gtk_action_create_tool_item (action);
-	gtk_box_pack_start (GTK_BOX (box), item, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (totem->fs->buttons_box), item, FALSE, FALSE, 0);
 	g_signal_connect (G_OBJECT (item), "clicked",
 			G_CALLBACK (on_mouse_click_fullscreen), totem);
 
 	action = gtk_action_group_get_action (totem->main_action_group, "next-chapter");
 	item = gtk_action_create_tool_item (action);
-	gtk_box_pack_start (GTK_BOX (box), item, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (totem->fs->buttons_box), item, FALSE, FALSE, 0);
 	g_signal_connect (G_OBJECT (item), "clicked",
 			G_CALLBACK (on_mouse_click_fullscreen), totem);
 
-	item = glade_xml_get_widget (totem->xml, "tcw_volume_mute_button");
-	g_signal_connect (G_OBJECT (item), "clicked",
-			G_CALLBACK (on_volume_mute_button), totem);
-	item = glade_xml_get_widget (totem->xml, "tcw_volume_max_button");
-	g_signal_connect (G_OBJECT (item), "clicked",
-			G_CALLBACK (on_volume_max_button), totem);
-
-	/* Control Popup Sliders */
-	g_signal_connect (G_OBJECT(totem->fs_seek), "button_press_event",
+	/* Fullscreen Control Popup Sliders */
+	g_signal_connect (G_OBJECT(totem->fs->seek), "button_press_event",
 			G_CALLBACK (seek_slider_pressed_cb), totem);
-	g_signal_connect (G_OBJECT(totem->fs_seek), "button_release_event",
+	g_signal_connect (G_OBJECT(totem->fs->seek), "button_release_event",
 			G_CALLBACK (seek_slider_released_cb), totem);
-	g_signal_connect (G_OBJECT (totem->fs_seekadj), "value-changed",
+	g_signal_connect (G_OBJECT (totem->fs->seekadj), "value-changed",
 			  G_CALLBACK (seek_slider_changed_cb), totem);
-	g_signal_connect (G_OBJECT(totem->fs_volume), "value-changed",
+	g_signal_connect (G_OBJECT(totem->fs->volume), "value-changed",
 			G_CALLBACK (vol_cb), totem);
-	g_signal_connect (G_OBJECT(totem->fs_volume), "button_press_event",
-			G_CALLBACK (vol_slider_pressed_cb), totem);
-	g_signal_connect (G_OBJECT(totem->fs_volume), "button_release_event",
-			G_CALLBACK (vol_slider_released_cb), totem);
 
 	/* Connect the keys */
 	gtk_widget_add_events (totem->win, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
@@ -3101,14 +2850,14 @@
 	gtk_widget_add_events (totem->seek, GDK_SCROLL_MASK);
 	g_signal_connect (G_OBJECT (totem->seek), "scroll_event",
 			G_CALLBACK (on_window_scroll_event), totem);
-	gtk_widget_add_events (totem->fs_seek, GDK_SCROLL_MASK);
-	g_signal_connect (G_OBJECT (totem->fs_seek), "scroll_event",
+	gtk_widget_add_events (totem->fs->seek, GDK_SCROLL_MASK);
+	g_signal_connect (G_OBJECT (totem->fs->seek), "scroll_event",
 			G_CALLBACK (on_window_scroll_event), totem);
 	gtk_widget_add_events (totem->volume, GDK_SCROLL_MASK);
 	g_signal_connect (G_OBJECT (totem->volume), "scroll_event",
 			G_CALLBACK (on_volume_scroll_event), totem);
-	gtk_widget_add_events (totem->fs_volume, GDK_SCROLL_MASK);
-	g_signal_connect (G_OBJECT (totem->fs_volume), "scroll_event",
+	gtk_widget_add_events (totem->fs->volume, GDK_SCROLL_MASK);
+	g_signal_connect (G_OBJECT (totem->fs->volume), "scroll_event",
 			G_CALLBACK (on_volume_scroll_event), totem);
 
 	/* Sliders */
@@ -3182,10 +2931,6 @@
 	totem_preferences_visuals_setup (totem);
 	totem_action_zoom (totem, ZOOM_RESET);
 
-	g_signal_connect (G_OBJECT (totem->bvw),
-			"motion-notify-event",
-			G_CALLBACK (on_video_motion_notify_event),
-			totem);
 	g_signal_connect_after (G_OBJECT (totem->bvw),
 			"button-press-event",
 			G_CALLBACK (on_video_button_press_event),
@@ -3384,7 +3129,6 @@
 
 	/* Init totem itself */
 	totem->prev_volume = -1;
-	totem->cursor_shown = TRUE;
 
 	/* Main window */
 	totem->xml = totem_interface_load ("totem.glade", _("main window"),
@@ -3405,26 +3149,11 @@
 	totem->seek = glade_xml_get_widget (totem->xml, "tmw_seek_hscale");
 	totem->seekadj = gtk_range_get_adjustment (GTK_RANGE (totem->seek));
 	g_object_set_data (G_OBJECT (totem->seek), "fs", GINT_TO_POINTER (0));
-	totem->volume = glade_xml_get_widget (totem->xml, "tcw_volume_button");
-	g_object_set_data (G_OBJECT (totem->volume), "fs", GINT_TO_POINTER (0));
-	totem->exit_popup = glade_xml_get_widget
-		(totem->xml, "totem_exit_fullscreen_window");
-	totem->control_popup = glade_xml_get_widget
-		(totem->xml, "totem_controls_window");
-	totem->fs_seek = glade_xml_get_widget (totem->xml, "tcw_seek_hscale");
-	totem->fs_seekadj = gtk_range_get_adjustment
-		(GTK_RANGE (totem->fs_seek));
-	g_object_set_data (G_OBJECT (totem->fs_seek), "fs", GINT_TO_POINTER (1));
-	totem->fs_volume = glade_xml_get_widget
-		(totem->xml, "tcw_volume_hscale");
-	totem->fs_voladj = gtk_range_get_adjustment
-		(GTK_RANGE (totem->fs_volume));
-	g_object_set_data (G_OBJECT (totem->fs_volume), "fs", GINT_TO_POINTER (1));
+	totem->volume = glade_xml_get_widget (totem->xml, "tmw_volume_button");
 	totem->volume_first_time = 1;
 	totem->statusbar = glade_xml_get_widget (totem->xml, "tmw_statusbar");
-	totem->tcw_time_label = glade_xml_get_widget (totem->xml,
-			"tcw_time_display_label");
-	totem->seek_lock = totem->vol_lock = totem->vol_fs_lock = FALSE;
+	totem->seek_lock = totem->vol_lock = FALSE;
+	totem->fs = totem_fullscreen_new ();
 
 	totem_session_setup (totem, argv);
 	totem_setup_recent (totem);
@@ -3439,7 +3168,6 @@
 	if (optionstate.fullscreen == FALSE) {
 		gtk_widget_show (totem->win);
 		totem_gdk_window_set_waiting_cursor (totem->win->window);
-		update_fullscreen_size (totem);
 		long_action ();
 	} else {
 		gtk_widget_realize (totem->win);
@@ -3450,6 +3178,7 @@
 	/* Show ! (again) the video widget this time. */
 	video_widget_create (totem);
 	gtk_widget_grab_focus (GTK_WIDGET (totem->bvw));
+	totem_fullscreen_set_video_widget (totem->fs, totem->bvw);
 
 	if (optionstate.fullscreen != FALSE) {
 		totem_action_fullscreen (totem, TRUE);
Index: totem/src/totem-fullscreen.c
===================================================================
--- totem/src/totem-fullscreen.c	(revision 0)
+++ totem/src/totem-fullscreen.c	(revision 0)
@@ -0,0 +1,497 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* 
+ * Copyright (C) 2001-2007 Bastien Nocera <hadess@hadess.net>
+ * Copyright (C) 2007 Sunil Mohan Adapa <sunilmohan@gnu.org.in>
+ *
+ * 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.
+ *
+ * The Totem project hereby grant permission for non-gpl compatible GStreamer
+ * plugins to be used and distributed together with GStreamer and Totem. This
+ * permission are above and beyond the permissions granted by the GPL license
+ * Totem is covered by.
+ *
+ */
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include "totem-fullscreen.h"
+#include "totem-interface.h"
+#include "totem-time-label.h"
+#include "bacon-video-widget.h"
+
+#define FULLSCREEN_POPUP_TIMEOUT 5 * 1000
+
+static GObjectClass *parent_class = NULL;
+
+static void     totem_fullscreen_class_init (TotemFullscreenClass *class);
+static void     totem_fullscreen_init       (TotemFullscreen      *parser);
+static void     totem_fullscreen_finalize   (GObject              *object);
+static gboolean totem_fullscreen_popup_hide (TotemFullscreen      *fs);
+
+struct TotemFullscreenPrivate {
+	BaconVideoWidget *bvw;
+	GtkWidget        *parent_window;
+
+	/* Fullscreen Popups */
+	GtkWidget        *exit_popup;
+	GtkWidget        *control_popup;
+
+	/* Locks for keeping the popups during adjustments */
+	gboolean          seek_lock;
+	gboolean          vol_lock;
+
+	guint             popup_timeout;
+	gboolean          popup_in_progress;
+
+	GladeXML         *xml;
+};
+
+G_DEFINE_TYPE(TotemFullscreen, totem_fullscreen, G_TYPE_OBJECT)
+
+gboolean
+totem_fullscreen_is_fullscreen (TotemFullscreen *fs)
+{
+	g_return_val_if_fail (TOTEM_IS_FULLSCREEN (fs), FALSE);
+
+	return (fs->is_fullscreen != FALSE);
+}
+
+static void
+totem_fullscreen_move_popups (TotemFullscreen *fs)
+{
+	int exit_width,    exit_height;
+	int control_width, control_height;
+	
+	GdkScreen              *screen;
+	GdkRectangle            fullscreen_rect;
+	TotemFullscreenPrivate *priv = fs->priv;
+
+	/* Obtain the screen rectangle */
+	screen = gtk_window_get_screen (GTK_WINDOW (fs->priv->parent_window));
+	gdk_screen_get_monitor_geometry (screen,
+					 gdk_screen_get_monitor_at_window
+					 (screen, 
+					  fs->priv->parent_window->window),
+					 &fullscreen_rect);
+
+	/* Get the popup window sizes */
+	gtk_window_get_size (GTK_WINDOW (priv->exit_popup),
+			     &exit_width, &exit_height);
+	gtk_window_get_size (GTK_WINDOW (priv->control_popup),
+			     &control_width, &control_height);
+
+	/* We take the full width of the screen */
+	gtk_window_resize (GTK_WINDOW (priv->control_popup),
+			   fullscreen_rect.width,
+			   control_height);
+
+	if (gtk_widget_get_direction (priv->exit_popup) == GTK_TEXT_DIR_RTL)
+	{
+		gtk_window_move (GTK_WINDOW (priv->exit_popup),
+				 fullscreen_rect.x,
+				 fullscreen_rect.y);
+		gtk_window_move (GTK_WINDOW (priv->control_popup),
+				 fullscreen_rect.width - control_width,
+				 fullscreen_rect.height + fullscreen_rect.y -
+				 control_height);
+	} else {
+		gtk_window_move (GTK_WINDOW (priv->exit_popup),
+				 fullscreen_rect.width + fullscreen_rect.x -
+				 exit_width,
+				 fullscreen_rect.y);
+		gtk_window_move (GTK_WINDOW (priv->control_popup),
+				 fullscreen_rect.x,
+				 fullscreen_rect.height + fullscreen_rect.y -
+				 control_height);
+	}
+}
+
+static void
+totem_fullscreen_size_changed_cb (GdkScreen *screen, TotemFullscreen *fs)
+{
+	totem_fullscreen_move_popups (fs);
+}
+
+static void
+totem_fullscreen_theme_changed_cb (GtkIconTheme *icon_theme, TotemFullscreen *fs)
+{
+	totem_fullscreen_move_popups (fs);
+}
+
+static void
+totem_fullscreen_window_realize_cb (GtkWidget *widget, TotemFullscreen *fs)
+{
+	GdkScreen *screen;
+	
+	screen = gtk_widget_get_screen (widget);
+	g_signal_connect (G_OBJECT (screen), "size-changed",
+			  G_CALLBACK (totem_fullscreen_size_changed_cb), fs);
+	g_signal_connect (G_OBJECT (gtk_icon_theme_get_for_screen (screen)),
+			  "changed",
+			  G_CALLBACK (totem_fullscreen_theme_changed_cb),
+			  fs);
+}
+
+static void
+totem_fullscreen_window_unrealize_cb (GtkWidget *widget, TotemFullscreen *fs)
+{
+	GdkScreen *screen;
+
+	screen = gtk_widget_get_screen (widget);
+	g_signal_handlers_disconnect_by_func
+		(screen, G_CALLBACK (totem_fullscreen_size_changed_cb), fs);
+	g_signal_handlers_disconnect_by_func
+		(gtk_icon_theme_get_for_screen (screen),
+		 G_CALLBACK (totem_fullscreen_theme_changed_cb), fs);
+}
+
+static gboolean
+totem_fullscreen_vol_slider_pressed_cb (GtkWidget *widget,
+					GdkEventButton *event,
+					TotemFullscreen *fs)
+{
+	fs->priv->vol_lock = TRUE;
+	return FALSE;
+}
+
+static gboolean
+totem_fullscreen_vol_slider_released_cb (GtkWidget *widget,
+					 GdkEventButton *event,
+					 TotemFullscreen *fs)
+{
+	fs->priv->vol_lock = FALSE;
+	return FALSE;
+}
+
+static gboolean
+totem_fullscreen_seek_slider_pressed_cb (GtkWidget *widget,
+					 GdkEventButton *event,
+					 TotemFullscreen *fs)
+{
+	fs->priv->seek_lock = TRUE;
+	return FALSE;
+}
+
+static gboolean
+totem_fullscreen_seek_slider_released_cb (GtkWidget *widget,
+					  GdkEventButton *event,
+					  TotemFullscreen *fs)
+{
+	fs->priv->seek_lock = FALSE;
+	return FALSE;
+}
+
+static void
+totem_fullscreen_on_volume_mute_button (GtkButton *button, TotemFullscreen *fs)
+{
+	/* This will inturn cause a change event
+	   which will be caught by parent */
+	gtk_adjustment_set_value (fs->voladj, fs->voladj->lower);
+}
+
+static void
+totem_fullscreen_on_volume_max_button (GtkButton *button, TotemFullscreen *fs)
+{
+	/* This will inturn cause a change event
+	   which will be caught by parent */
+	gtk_adjustment_set_value (fs->voladj, fs->voladj->upper);
+}
+
+static void
+totem_fullscreen_popup_timeout_add (TotemFullscreen *fs)
+{
+	fs->priv->popup_timeout = g_timeout_add 
+		(FULLSCREEN_POPUP_TIMEOUT,
+		 (GSourceFunc) totem_fullscreen_popup_hide,
+		 fs);
+}
+
+static void
+totem_fullscreen_popup_timeout_remove (TotemFullscreen *fs)
+{
+	if (fs->priv->popup_timeout != 0)
+	{
+		g_source_remove (fs->priv->popup_timeout);
+		fs->priv->popup_timeout = 0;
+	}
+}
+
+static void
+totem_fullscreen_set_cursor (TotemFullscreen *fs, gboolean state)
+{
+	bacon_video_widget_set_show_cursor (fs->priv->bvw, state);
+}
+
+static gboolean
+totem_fullscreen_popup_hide (TotemFullscreen *fs)
+{
+	if (fs->priv->bvw == NULL ||
+	    totem_fullscreen_is_fullscreen (fs) == FALSE)
+		return TRUE;
+
+	if (fs->priv->seek_lock != FALSE ||
+	    fs->priv->vol_lock != FALSE)
+		return TRUE;
+
+	gtk_widget_hide (fs->priv->exit_popup);
+	gtk_widget_hide (fs->priv->control_popup);
+
+	totem_fullscreen_popup_timeout_remove (fs);
+
+	totem_fullscreen_set_cursor (fs, FALSE);
+
+	return FALSE;
+}
+
+gboolean
+totem_fullscreen_motion_notify (GtkWidget *widget, GdkEventMotion *event,
+				TotemFullscreen *fs)
+{
+	GtkWidget * item;
+
+	if (totem_fullscreen_is_fullscreen (fs) == FALSE) 
+		return FALSE;
+
+	if (fs->priv->popup_in_progress != FALSE)
+		return FALSE;
+
+	fs->priv->popup_in_progress = TRUE;
+
+	totem_fullscreen_popup_timeout_remove (fs);
+
+	/* FIXME: is this really required while we are anyway going 
+	   to do a show_all on its parent control_popup? */
+	item = glade_xml_get_widget (fs->priv->xml, "tcw_hbox");
+	gtk_widget_show_all (item);
+	gdk_flush ();
+
+	/* Show the popup widgets */
+	totem_fullscreen_move_popups (fs);
+	gtk_widget_show_all (fs->priv->exit_popup);
+	gtk_widget_show_all (fs->priv->control_popup);
+
+	/* Show the mouse cursor */
+	totem_fullscreen_set_cursor (fs, TRUE);
+
+	/* Reset the popup timeout */
+	totem_fullscreen_popup_timeout_add (fs);
+
+	fs->priv->popup_in_progress = FALSE;
+
+	return FALSE;
+}
+
+void
+totem_fullscreen_set_fullscreen (TotemFullscreen *fs,
+				 gboolean fullscreen)
+{
+	g_return_if_fail (TOTEM_IS_FULLSCREEN (fs));
+
+	totem_fullscreen_popup_hide (fs);
+
+	bacon_video_widget_set_fullscreen (fs->priv->bvw, fullscreen);
+	totem_fullscreen_set_cursor (fs, !fullscreen);
+
+	fs->is_fullscreen = fullscreen;
+}
+
+TotemFullscreen *
+totem_fullscreen_new ()
+{
+	GtkWidget * item;
+	TotemFullscreenPrivate * priv;
+
+        TotemFullscreen *fs = TOTEM_FULLSCREEN (g_object_new 
+						(TOTEM_TYPE_FULLSCREEN, NULL));
+
+
+	priv = fs->priv;
+	priv->vol_lock = priv->seek_lock = FALSE;
+	priv->xml = totem_interface_load ("fullscreen.glade",
+					  _("fullscreen widgets"),
+					  TRUE, NULL);
+
+	priv->exit_popup = glade_xml_get_widget 
+		(priv->xml,
+		 "totem_exit_fullscreen_window");
+	priv->control_popup = glade_xml_get_widget (priv->xml,
+						    "totem_controls_window");
+	fs->time_label = glade_xml_get_widget (priv->xml,
+					       "tcw_time_display_label");
+	fs->buttons_box = glade_xml_get_widget (fs->priv->xml,
+						"tcw_buttons_hbox");
+	fs->exit_button = glade_xml_get_widget (priv->xml,
+						"tefw_fs_exit_button");
+
+	/* Volume */
+	fs->volume = glade_xml_get_widget (priv->xml, "tcw_volume_hscale");
+	fs->voladj = gtk_range_get_adjustment (GTK_RANGE (fs->volume));
+	g_object_set_data (G_OBJECT (fs->volume), "fs", GINT_TO_POINTER (1));
+	g_signal_connect (G_OBJECT(fs->volume), "button_press_event",
+			  G_CALLBACK (totem_fullscreen_vol_slider_pressed_cb),
+			  fs);
+	g_signal_connect (G_OBJECT(fs->volume), "button_release_event",
+			  G_CALLBACK (totem_fullscreen_vol_slider_released_cb),
+			  fs);
+	item = glade_xml_get_widget (fs->priv->xml, "tcw_volume_mute_button");
+	g_signal_connect (G_OBJECT (item), "clicked",
+			  G_CALLBACK (totem_fullscreen_on_volume_mute_button),
+			  fs);
+	item = glade_xml_get_widget (fs->priv->xml, "tcw_volume_max_button");
+	g_signal_connect (G_OBJECT (item), "clicked",
+			  G_CALLBACK (totem_fullscreen_on_volume_max_button),
+			  fs);
+	
+	/* Seek */
+	fs->seek = glade_xml_get_widget (priv->xml, "tcw_seek_hscale");
+	fs->seekadj = gtk_range_get_adjustment (GTK_RANGE (fs->seek));
+	g_object_set_data (G_OBJECT (fs->seek), "fs", GINT_TO_POINTER (1));
+	g_signal_connect (G_OBJECT(fs->seek), "button_press_event",
+			  G_CALLBACK (totem_fullscreen_seek_slider_pressed_cb),
+			  fs);
+	g_signal_connect (G_OBJECT(fs->seek), "button_release_event",
+			  G_CALLBACK (totem_fullscreen_seek_slider_released_cb),
+			  fs);
+
+	/* Motion notify */
+	gtk_widget_add_events (priv->exit_popup, GDK_POINTER_MOTION_MASK);
+	g_signal_connect (G_OBJECT (priv->exit_popup), "motion-notify-event",
+			  G_CALLBACK (totem_fullscreen_motion_notify), fs);
+	gtk_widget_add_events (priv->control_popup, GDK_POINTER_MOTION_MASK);
+	g_signal_connect (G_OBJECT (priv->control_popup),
+			  "motion-notify-event",
+			  G_CALLBACK (totem_fullscreen_motion_notify), fs);
+	gtk_widget_add_events (fs->seek, GDK_POINTER_MOTION_MASK);
+	g_signal_connect (G_OBJECT (fs->seek), "motion-notify-event",
+			  G_CALLBACK (totem_fullscreen_motion_notify), fs);
+	gtk_widget_add_events (fs->volume, GDK_POINTER_MOTION_MASK);
+	g_signal_connect (G_OBJECT (fs->volume), "motion-notify-event",
+			  G_CALLBACK (totem_fullscreen_motion_notify), fs);
+	gtk_widget_add_events (fs->exit_button, GDK_POINTER_MOTION_MASK);
+	g_signal_connect (G_OBJECT (fs->exit_button), "motion-notify-event",
+			  G_CALLBACK (totem_fullscreen_motion_notify), fs);
+
+	return fs;
+}
+
+void
+totem_fullscreen_set_video_widget (TotemFullscreen *fs,
+				   BaconVideoWidget *bvw)
+{
+	g_return_if_fail (TOTEM_IS_FULLSCREEN (fs));
+	g_return_if_fail (BACON_IS_VIDEO_WIDGET (bvw));
+
+	fs->priv->bvw = bvw;
+	fs->priv->parent_window = gtk_widget_get_toplevel (GTK_WIDGET (bvw));
+
+	/* Screen size and Theme changes */
+	g_signal_connect (fs->priv->parent_window, "realize",
+			  G_CALLBACK (totem_fullscreen_window_realize_cb), fs);
+	g_signal_connect (fs->priv->parent_window, "unrealize",
+			  G_CALLBACK (totem_fullscreen_window_unrealize_cb),
+			  fs);
+	g_signal_connect (G_OBJECT (fs->priv->bvw), "motion-notify-event",
+			  G_CALLBACK (totem_fullscreen_motion_notify), fs);
+	g_object_notify (G_OBJECT (fs->priv->parent_window), "is-active");
+	g_signal_connect_swapped (G_OBJECT (fs->priv->parent_window), "notify",
+				  G_CALLBACK (totem_fullscreen_popup_hide),
+				  fs);
+
+}
+
+static void
+totem_fullscreen_init (TotemFullscreen *fs)
+{
+        fs->priv = g_new0 (TotemFullscreenPrivate, 1);
+}
+
+static void
+totem_fullscreen_finalize (GObject *object)
+{
+        TotemFullscreen *fs = TOTEM_FULLSCREEN (object);
+
+	totem_fullscreen_popup_timeout_remove (fs);
+
+        g_free (fs->priv);
+
+        if (G_OBJECT_CLASS (parent_class)->finalize != NULL) {
+                (* G_OBJECT_CLASS (parent_class)->finalize) (object);
+        }
+}
+
+static void
+totem_fullscreen_class_init (TotemFullscreenClass *klass)
+{
+        GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+        parent_class = g_type_class_peek_parent (klass);
+
+        object_class->finalize = totem_fullscreen_finalize;
+}
+
+void
+totem_fullscreen_set_title (TotemFullscreen *fs, const gchar *title)
+{
+	GtkWidget *widget;
+	gchar *text;
+
+	g_return_if_fail (TOTEM_IS_FULLSCREEN (fs));
+
+	widget = glade_xml_get_widget (fs->priv->xml, "tcw_title_label");
+
+	if (title != NULL)
+	{
+		gchar *escaped;
+
+		escaped = g_markup_escape_text (title, -1);
+		text = g_strdup_printf
+			("<span size=\"medium\"><b>%s</b></span>", escaped);
+		g_free (escaped);
+	} else {
+		text = g_strdup_printf
+			("<span size=\"medium\"><b>%s</b></span>",
+			 _("No File"));
+	}
+
+	gtk_label_set_markup (GTK_LABEL (widget), text);
+	g_free (text);
+}
+
+void
+totem_fullscreen_set_seekable (TotemFullscreen *fs, gboolean seekable)
+{
+	GtkWidget *item;
+
+	g_return_if_fail (TOTEM_IS_FULLSCREEN (fs));
+
+	item = glade_xml_get_widget (fs->priv->xml, "tcw_time_hbox");
+	gtk_widget_set_sensitive (item, seekable);
+
+	gtk_widget_set_sensitive (fs->seek, seekable);
+}
+
+void
+totem_fullscreen_set_can_set_volume (TotemFullscreen *fs, gboolean can_set_volume)
+{
+	GtkWidget *item;
+
+	g_return_if_fail (TOTEM_IS_FULLSCREEN (fs));
+
+	item = glade_xml_get_widget (fs->priv->xml, "tcw_volume_hbox");
+	gtk_widget_set_sensitive (item, can_set_volume);
+}
Index: totem/src/totem-fullscreen.h
===================================================================
--- totem/src/totem-fullscreen.h	(revision 0)
+++ totem/src/totem-fullscreen.h	(revision 0)
@@ -0,0 +1,86 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* 
+ * Copyright (C) 2007 Sunil Mohan Adapa <sunilmohan@gnu.org.in>
+ *
+ * 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.
+ *
+ * The Totem project hereby grant permission for non-gpl compatible GStreamer
+ * plugins to be used and distributed together with GStreamer and Totem. This
+ * permission are above and beyond the permissions granted by the GPL license
+ * Totem is covered by.
+ *
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+#include "bacon-video-widget.h"
+
+#define TOTEM_TYPE_FULLSCREEN            (totem_fullscreen_get_type ())
+#define TOTEM_FULLSCREEN(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+                                          TOTEM_TYPE_FULLSCREEN, \
+                                          TotemFullscreen))
+#define TOTEM_FULLSCREEN_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), \
+                                          TOTEM_TYPE_FULLSCREEN, \
+                                          TotemFullscreenClass))
+#define TOTEM_IS_FULLSCREEN(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+                                          TOTEM_TYPE_FULLSCREEN))
+#define TOTEM_IS_FULLSCREEN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+                                          TOTEM_TYPE_FULLSCREEN))
+
+typedef struct TotemFullscreen TotemFullscreen;
+typedef struct TotemFullscreenClass TotemFullscreenClass;
+typedef struct TotemFullscreenPrivate TotemFullscreenPrivate;
+
+struct TotemFullscreen {
+	GObject                parent;
+	
+	/* Public Widgets from popups */
+	GtkWidget              *time_label;
+	GtkWidget              *seek;
+	GtkAdjustment          *seekadj;
+	GtkWidget              *volume;
+	GtkAdjustment          *voladj;
+	GtkWidget              *buttons_box;
+	GtkWidget              *exit_button;
+
+	/* Read only */
+	gboolean                is_fullscreen;
+
+	/* Private */
+	TotemFullscreenPrivate *priv;
+};
+
+struct TotemFullscreenClass {
+	GObjectClass parent_class;
+};
+
+GType    totem_fullscreen_get_type           (void);
+TotemFullscreen * totem_fullscreen_new       ();
+void     totem_fullscreen_set_video_widget   (TotemFullscreen *fs,
+					      BaconVideoWidget *bvw);
+gboolean totem_fullscreen_motion_notify      (GtkWidget *widget,
+					      GdkEventMotion *event,
+					      TotemFullscreen *fs);
+gboolean totem_fullscreen_is_fullscreen      (TotemFullscreen *fs);
+void     totem_fullscreen_set_fullscreen     (TotemFullscreen *fs,
+					      gboolean fullscreen);
+void     totem_fullscreen_set_title          (TotemFullscreen *fs,
+					      const gchar *title);
+void     totem_fullscreen_set_seekable       (TotemFullscreen *fs,
+					      gboolean seekable);
+void     totem_fullscreen_set_can_set_volume (TotemFullscreen *fs,
+					      gboolean can_set_volume);
Index: totem/data/totem.glade
===================================================================
--- totem/data/totem.glade	(revision 4401)
+++ totem/data/totem.glade	(working copy)
@@ -3,95 +3,6 @@
 
 <glade-interface>
 
-<widget class="GtkWindow" id="totem_exit_fullscreen_window">
-  <property name="title" translatable="yes">window1</property>
-  <property name="type">GTK_WINDOW_POPUP</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="resizable">False</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <property name="focus_on_map">True</property>
-  <property name="urgency_hint">False</property>
-
-  <child>
-    <widget class="GtkButton" id="tefw_fs_exit_button">
-      <property name="visible">True</property>
-      <property name="can_focus">True</property>
-      <property name="relief">GTK_RELIEF_NORMAL</property>
-      <property name="focus_on_click">True</property>
-
-      <child>
-	<widget class="GtkAlignment" id="tefw_alignment">
-	  <property name="visible">True</property>
-	  <property name="xalign">0.5</property>
-	  <property name="yalign">0.5</property>
-	  <property name="xscale">0</property>
-	  <property name="yscale">0</property>
-	  <property name="top_padding">0</property>
-	  <property name="bottom_padding">0</property>
-	  <property name="left_padding">0</property>
-	  <property name="right_padding">0</property>
-
-	  <child>
-	    <widget class="GtkHBox" id="tefw_hbox">
-	      <property name="visible">True</property>
-	      <property name="homogeneous">False</property>
-	      <property name="spacing">2</property>
-
-	      <child>
-		<widget class="GtkImage" id="tefw_image">
-		  <property name="visible">True</property>
-		  <property name="icon_size">4</property>
-		  <property name="icon_name">view-restore</property>
-		  <property name="xalign">0.5</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">False</property>
-		  <property name="fill">False</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="tefw_label">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">Leave Fullscreen</property>
-		  <property name="use_underline">True</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0.5</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">False</property>
-		  <property name="fill">False</property>
-		</packing>
-	      </child>
-	    </widget>
-	  </child>
-	</widget>
-      </child>
-    </widget>
-  </child>
-</widget>
-
 <widget class="GtkDialog" id="totem_preferences_window">
   <property name="border_width">5</property>
   <property name="title" translatable="yes">Totem Preferences</property>
@@ -1415,239 +1326,6 @@
   </child>
 </widget>
 
-<widget class="GtkWindow" id="totem_controls_window">
-  <property name="title" translatable="yes"></property>
-  <property name="type">GTK_WINDOW_POPUP</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
-  <property name="gravity">GDK_GRAVITY_SOUTH_WEST</property>
-  <property name="focus_on_map">True</property>
-  <property name="urgency_hint">False</property>
-
-  <child>
-    <widget class="GtkHBox" id="tcw_hbox">
-      <property name="visible">True</property>
-      <property name="homogeneous">False</property>
-      <property name="spacing">4</property>
-
-      <child>
-	<widget class="GtkHBox" id="tcw_buttons_hbox">
-	  <property name="visible">True</property>
-	  <property name="homogeneous">True</property>
-	  <property name="spacing">4</property>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkHBox" id="tcw_time_hbox">
-	  <property name="visible">True</property>
-	  <property name="homogeneous">False</property>
-	  <property name="spacing">2</property>
-
-	  <child>
-	    <widget class="GtkLabel" id="tcw_time_label">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Time:</property>
-	      <property name="use_underline">False</property>
-	      <property name="use_markup">False</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0.5</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-	      <property name="width_chars">-1</property>
-	      <property name="single_line_mode">False</property>
-	      <property name="angle">0</property>
-	    </widget>
-	    <packing>
-	      <property name="padding">0</property>
-	      <property name="expand">False</property>
-	      <property name="fill">False</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkHScale" id="tcw_seek_hscale">
-	      <property name="visible">True</property>
-	      <property name="sensitive">False</property>
-	      <property name="can_focus">True</property>
-	      <property name="draw_value">False</property>
-	      <property name="value_pos">GTK_POS_TOP</property>
-	      <property name="digits">1</property>
-	      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
-	      <property name="inverted">False</property>
-	      <property name="adjustment">0 0 65536 1 10 0</property>
-	    </widget>
-	    <packing>
-	      <property name="padding">0</property>
-	      <property name="expand">True</property>
-	      <property name="fill">True</property>
-	    </packing>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">True</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkHBox" id="tcw_name_time_hbox">
-	  <property name="visible">True</property>
-	  <property name="homogeneous">False</property>
-	  <property name="spacing">3</property>
-
-	  <child>
-	    <widget class="Custom" id="tcw_time_display_label">
-	      <property name="visible">True</property>
-	      <property name="creation_function">totem_time_label_new_from_glade</property>
-	      <property name="int1">0</property>
-	      <property name="int2">0</property>
-	      <property name="last_modification_time">Sat, 03 Jul 2004 19:41:43 GMT</property>
-	    </widget>
-	    <packing>
-	      <property name="padding">0</property>
-	      <property name="expand">False</property>
-	      <property name="fill">False</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkLabel" id="tcw_title_label">
-	      <property name="visible">True</property>
-	      <property name="label">No file</property>
-	      <property name="use_underline">False</property>
-	      <property name="use_markup">True</property>
-	      <property name="justify">GTK_JUSTIFY_CENTER</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0.5</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	      <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
-	      <property name="width_chars">-1</property>
-	      <property name="single_line_mode">True</property>
-	      <property name="angle">0</property>
-	    </widget>
-	    <packing>
-	      <property name="padding">0</property>
-	      <property name="expand">True</property>
-	      <property name="fill">True</property>
-	    </packing>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">True</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkHBox" id="tcw_volume_hbox">
-	  <property name="width_request">250</property>
-	  <property name="visible">True</property>
-	  <property name="sensitive">False</property>
-	  <property name="homogeneous">False</property>
-	  <property name="spacing">0</property>
-
-	  <child>
-	    <widget class="GtkButton" id="tcw_volume_mute_button">
-	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="relief">GTK_RELIEF_NONE</property>
-	      <property name="focus_on_click">True</property>
-
-	      <child>
-		<widget class="GtkImage" id="tcw_volume_mute_image">
-		  <property name="visible">True</property>
-		  <property name="icon_size">4</property>
-		  <property name="icon_name">audio-volume-muted</property>
-		  <property name="xalign">0.5</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		</widget>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="padding">0</property>
-	      <property name="expand">False</property>
-	      <property name="fill">False</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkHScale" id="tcw_volume_hscale">
-	      <property name="width_request">100</property>
-	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="draw_value">False</property>
-	      <property name="value_pos">GTK_POS_TOP</property>
-	      <property name="digits">1</property>
-	      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
-	      <property name="inverted">False</property>
-	      <property name="adjustment">0 0 100 1 10 0</property>
-	    </widget>
-	    <packing>
-	      <property name="padding">0</property>
-	      <property name="expand">True</property>
-	      <property name="fill">True</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkButton" id="tcw_volume_max_button">
-	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="relief">GTK_RELIEF_NONE</property>
-	      <property name="focus_on_click">True</property>
-
-	      <child>
-		<widget class="GtkImage" id="tcw_volume_max_image">
-		  <property name="visible">True</property>
-		  <property name="icon_size">4</property>
-		  <property name="icon_name">audio-volume-high</property>
-		  <property name="xalign">0.5</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		</widget>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="padding">0</property>
-	      <property name="expand">False</property>
-	      <property name="fill">False</property>
-	    </packing>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-    </widget>
-  </child>
-</widget>
-
 <widget class="GtkWindow" id="totem_main_window">
   <property name="title" translatable="yes">Totem Movie Player</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
@@ -1806,7 +1484,7 @@
 		      </child>
 
 		      <child>
-			<widget class="Custom" id="tcw_volume_button">
+			<widget class="Custom" id="tmw_volume_button">
 			  <property name="visible">True</property>
 			  <property name="creation_function">totem_volume_create</property>
 			  <property name="int1">0</property>
Index: totem/data/Makefile.am
===================================================================
--- totem/data/Makefile.am	(revision 4401)
+++ totem/data/Makefile.am	(working copy)
@@ -9,6 +9,7 @@
 	filmholes-big-right.png		\
 	stock-tool-brightness-contrast-22.png	\
 	totem.glade			\
+	fullscreen.glade		\
 	playlist.glade			\
 	playlist-ui.xml			\
 	plugins.glade			\
Index: totem/data/fullscreen.glade
===================================================================
--- totem/data/fullscreen.glade	(revision 0)
+++ totem/data/fullscreen.glade	(revision 0)
@@ -0,0 +1,328 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="totem_exit_fullscreen_window">
+  <property name="title" translatable="yes">window1</property>
+  <property name="type">GTK_WINDOW_POPUP</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">False</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkButton" id="tefw_fs_exit_button">
+      <property name="visible">True</property>
+      <property name="can_focus">True</property>
+      <property name="relief">GTK_RELIEF_NORMAL</property>
+      <property name="focus_on_click">True</property>
+
+      <child>
+	<widget class="GtkAlignment" id="tefw_alignment">
+	  <property name="visible">True</property>
+	  <property name="xalign">0.5</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xscale">0</property>
+	  <property name="yscale">0</property>
+	  <property name="top_padding">0</property>
+	  <property name="bottom_padding">0</property>
+	  <property name="left_padding">0</property>
+	  <property name="right_padding">0</property>
+
+	  <child>
+	    <widget class="GtkHBox" id="tefw_hbox">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">2</property>
+
+	      <child>
+		<widget class="GtkImage" id="tefw_image">
+		  <property name="visible">True</property>
+		  <property name="icon_size">4</property>
+		  <property name="icon_name">view-restore</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="tefw_label">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Leave Fullscreen</property>
+		  <property name="use_underline">True</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	  </child>
+	</widget>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkWindow" id="totem_controls_window">
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_POPUP</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_SOUTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkHBox" id="tcw_hbox">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">4</property>
+
+      <child>
+	<widget class="GtkHBox" id="tcw_buttons_hbox">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">True</property>
+	  <property name="spacing">4</property>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHBox" id="tcw_time_hbox">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">2</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="tcw_time_label">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Time:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHScale" id="tcw_seek_hscale">
+	      <property name="visible">True</property>
+	      <property name="sensitive">False</property>
+	      <property name="can_focus">True</property>
+	      <property name="draw_value">False</property>
+	      <property name="value_pos">GTK_POS_TOP</property>
+	      <property name="digits">1</property>
+	      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+	      <property name="inverted">False</property>
+	      <property name="adjustment">0 0 65536 1 10 0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHBox" id="tcw_name_time_hbox">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">3</property>
+
+	  <child>
+	    <widget class="Custom" id="tcw_time_display_label">
+	      <property name="visible">True</property>
+	      <property name="creation_function">totem_time_label_new_from_glade</property>
+	      <property name="int1">0</property>
+	      <property name="int2">0</property>
+	      <property name="last_modification_time">Sat, 03 Jul 2004 19:41:43 GMT</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="tcw_title_label">
+	      <property name="visible">True</property>
+	      <property name="label">No file</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">True</property>
+	      <property name="justify">GTK_JUSTIFY_CENTER</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">True</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHBox" id="tcw_volume_hbox">
+	  <property name="width_request">250</property>
+	  <property name="visible">True</property>
+	  <property name="sensitive">False</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkButton" id="tcw_volume_mute_button">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="relief">GTK_RELIEF_NONE</property>
+	      <property name="focus_on_click">True</property>
+
+	      <child>
+		<widget class="GtkImage" id="tcw_volume_mute_image">
+		  <property name="visible">True</property>
+		  <property name="icon_size">4</property>
+		  <property name="icon_name">audio-volume-muted</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		</widget>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHScale" id="tcw_volume_hscale">
+	      <property name="width_request">100</property>
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="draw_value">False</property>
+	      <property name="value_pos">GTK_POS_TOP</property>
+	      <property name="digits">1</property>
+	      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+	      <property name="inverted">False</property>
+	      <property name="adjustment">0 0 100 1 10 0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="tcw_volume_max_button">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="relief">GTK_RELIEF_NONE</property>
+	      <property name="focus_on_click">True</property>
+
+	      <child>
+		<widget class="GtkImage" id="tcw_volume_max_image">
+		  <property name="visible">True</property>
+		  <property name="icon_size">4</property>
+		  <property name="icon_name">audio-volume-high</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		</widget>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
