sinek/src gtkxine.c,1.13,1.14 main.c,1.27,1.28

[email protected] Mon, 17 Feb 2003 01:48:56 -0800
Newsgroups gmane.comp.video.sinek.cvs
Message-ID <[email protected]>
Update of /cvsroot/sinek/sinek/src
In directory sc8-pr-cvs1:/tmp/cvs-serv29321/src

Modified Files:
	gtkxine.c main.c 
Log Message:
clean up some event crap


Index: gtkxine.c
===================================================================
RCS file: /cvsroot/sinek/sinek/src/gtkxine.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- gtkxine.c	17 Feb 2003 08:26:01 -0000	1.13
+++ gtkxine.c	17 Feb 2003 09:48:53 -0000	1.14
@@ -517,15 +517,6 @@
 	return xine_get_status (xine->stream);
 }
 
-void gtk_xine_event_listener (GtkXine *xine, gtk_xine_event_cb event_cb, void *user_data)
-{
-	xine_event_queue_t *eventq;
-
-	eventq = xine_event_new_queue (xine->stream);
-	xine_event_create_listener_thread (eventq, (xine_event_listener_cb_t) event_cb, user_data);
-	/* XXX: dispose of queue, or keep it around for multiple regs? */
-}
-
 void gtk_xine_event_send (GtkXine *xine, GtkXineEventType type, void *user_data)
 {
 	xine_event_t event;
@@ -659,6 +650,27 @@
 	return 1;
 }
 
+static void gtkxine_event (void *user_data, const xine_event_t *event)
+{
+	GtkXine *xine = GTK_XINE (user_data);
+
+	if (event->type == XINE_EVENT_UI_PLAYBACK_FINISHED) {
+		gtk_xine_video_scrsaver_set (xine, TRUE);
+		xine_event_dispose_queue (xine->event_queue);
+		xine->event_queue = NULL;
+	}
+}
+
+static int gtk_xine_play (GtkXine *xine, int start_pos, int start_time)
+{
+	gtk_xine_video_scrsaver_set (xine, FALSE); /* TODO: only disable if has_video */
+	if (!xine->event_queue) {
+		xine->event_queue = xine_event_new_queue (xine->stream);
+		xine_event_create_listener_thread (xine->event_queue, gtkxine_event, xine);
+	}
+	return xine_play (xine->stream, start_pos, start_time);
+}
+
 int gtk_xine_set_speed (GtkXine *xine, GtkXineSpeed speed)
 {
 	if (speed == GTK_XINE_SPEED_STOP) {
@@ -669,9 +681,8 @@
 	else if (xine->mrl[0] == '\0')
 		return 0;
 	else {
-		gtk_xine_video_scrsaver_set (xine, FALSE);/* TODO: only disable if has_video */
 		if (xine_get_status (xine->stream) != XINE_STATUS_PLAY)
-			xine_play (xine->stream, 0, 0);
+			gtk_xine_play (xine, 0, 0);
 		xine_set_param (xine->stream, XINE_PARAM_SPEED, speed);
 		return speed == xine_get_param (xine->stream, XINE_PARAM_SPEED);
 	}
@@ -679,14 +690,12 @@
 
 int gtk_xine_set_position (GtkXine *xine, int position)
 {
-	gtk_xine_video_scrsaver_set (xine, FALSE);
-	return xine_play (xine->stream, position, 0);
+	return gtk_xine_play (xine, position, 0);
 }
 
 int gtk_xine_set_time (GtkXine *xine, int time)
 {
-	gtk_xine_video_scrsaver_set (xine, FALSE);
-	return xine_play (xine->stream, 0, time);
+	return gtk_xine_play (xine, 0, time);
 }
 
 static void disable_video_output (GtkXine *xine)

Index: main.c
===================================================================
RCS file: /cvsroot/sinek/sinek/src/main.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- main.c	17 Feb 2003 08:26:01 -0000	1.27
+++ main.c	17 Feb 2003 09:48:53 -0000	1.28
@@ -13,9 +13,6 @@
 
 struct sinek_globals sinek;
 
-static int stream_finished = 0;
-
-static void event_listener(void *this, const GtkXineEvent *event);
 static gboolean second_update(gpointer data);
 
 #ifdef USE_GUILE
@@ -60,7 +57,6 @@
 	control_update_slider(0, 0);
 	popup_init();
 
-	gtk_xine_event_listener(GTK_XINE(sinek.xine), event_listener, &sinek);
 	pl_init();
 	g_timeout_add(500, (GSourceFunc)second_update, NULL);
 
@@ -86,38 +82,34 @@
 
 static gboolean second_update(gpointer data)
 {
-	if(stream_finished)
-	{
-		if(!guile_stop_hook())
-		{
-			if(sinek.playing)
-			{
-				if(sinek.repeat_one)
+	static GtkXineSpeed last = GTK_XINE_SPEED_STOP;
+	GtkXineSpeed curr;
+
+	g_object_get(G_OBJECT(sinek.xine), "speed", &curr, NULL);
+	if (curr == GTK_XINE_SPEED_STOP) {
+		if (last != GTK_XINE_SPEED_STOP && !guile_stop_hook()) {
+			if (sinek.playing) {
+				if (sinek.repeat_one)
 					g_object_set(G_OBJECT(sinek.xine), "time", 0, NULL);
 				else
 					pl_next();
 			}
 		}
-		stream_finished = 0;
 	}
-	if(gtk_xine_get_status(GTK_XINE(sinek.xine)) == GTK_XINE_STATUS_PLAYING)
-	{
-		if(!sinek.seeking)
-		{
+	else {
+		if (!sinek.seeking) {
 			int pos, length;
-			
+
 			g_object_get(G_OBJECT(sinek.xine), "time", &pos, "length", &length, NULL);
 			if (length)
 				control_update_slider(pos, length);
 		}
-		if(sinek.osd_subtitles) osd_update();
-		if(++sinek.cursor_timer == 3) video_cursor(0);
+		if (sinek.osd_subtitles)
+			osd_update();
+		if (++sinek.cursor_timer == 3)
+			video_cursor(0);
 	}
-	return TRUE;
-}
+	last = curr;
 
-static void event_listener(void *this, const GtkXineEvent *event)
-{
-	if (event->type == GTK_XINE_EVENT_TYPE_PLAYBACK_FINISHED)
-		stream_finished = 1;
+	return TRUE;
 }




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf