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