--- totem (orginal).c	2006-10-13 16:28:12.000000000 +0200
+++ totem.c	2006-10-16 14:27:41.000000000 +0200
@@ -38,6 +38,8 @@
 #include <stdlib.h>
 #endif /* !HAVE_GTK_ONLY */
 
+#include <time.h>
+#include <math.h>
 #include <string.h>
 
 /* X11 headers */
@@ -83,6 +85,11 @@
 
 #define FULLSCREEN_POPUP_TIMEOUT 5 * 1000
 
+// Distance the cursor needs to be moved for the controls to pop up
+#define FULLSCREEN_POPUP_MOVEMENT_REQUIRED 800  // pixels(?)
+// Not moving the mouse in this amount of time resets the movement counter
+#define FULLSCREEN_POPUP_MOVEMENT_TIMEOUT 3     // seconds
+
 #define BVW_VBOX_BORDER_WIDTH 1
 
 static const GtkTargetEntry target_table[] = {
@@ -2281,6 +2288,11 @@ on_video_motion_notify_event (GtkWidget 
 		Totem *totem)
 {
 	GtkWidget *item;
+	gboolean bShowControls = FALSE;
+	// Variables for keeping track of cursor movement...
+	static int s_iLastX=0, s_iLastY=0, s_iTotalMovement=0;
+	static time_t s_iLastMovementInTime = 0;
+	
 
 	if (totem_is_fullscreen (totem) == FALSE) 
 		return FALSE;
@@ -2290,19 +2302,44 @@ on_video_motion_notify_event (GtkWidget 
 
 	totem->popup_in_progress = TRUE;
 
-	popup_timeout_remove (totem);
+	// Wheel events propagate here with a NULL event variable
+	if(event == NULL)
+		bShowControls = TRUE;
+	else
+	{
+		time_t iNow = time(NULL);
+		// Timeout? Then reset the amount moved...
+		if (difftime(iNow, s_iLastMovementInTime) > FULLSCREEN_POPUP_MOVEMENT_TIMEOUT)
+		{
+	 		s_iTotalMovement = 0;
+			s_iLastX = event->x;
+			s_iLastY = event->y;
+		}
 
-	item = glade_xml_get_widget (totem->xml, "tcw_hbox");
-	gtk_widget_show_all (item);
-	gdk_flush ();
+		s_iTotalMovement += (int) sqrt(pow(event->x - s_iLastX,2) + pow(event->y - s_iLastY,2));
+		s_iLastMovementInTime = iNow;		
+		if(s_iTotalMovement > FULLSCREEN_POPUP_MOVEMENT_REQUIRED)
+			bShowControls = TRUE;
+	}
 
-	move_popups (totem);
 
-	gtk_widget_show_all (totem->exit_popup);
-	gtk_widget_show_all (totem->control_popup);
-	totem_action_set_cursor (totem, TRUE);
+	if(bShowControls == 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);
+	}
 
-	popup_timeout_add (totem);
 	totem->popup_in_progress = FALSE;
 
 	return FALSE;
