Package: teatime
Version: 2.8.0-3

Hello,

teatime doesn't play a sound file on teacup popup, which I set in the
properties. I have prepared a fix for this bug, which is attached with
this mail.

I am using debian-sid 2.6.24-1-686, libc6 version 2.7-10.
diff -urN old/debian/patches/91_gst_enable_playing.patch new/debian/patches/91_gst_enable_playing.patch
--- old/debian/patches/91_gst_enable_playing.patch	1970-01-01 01:00:00.000000000 +0100
+++ new/debian/patches/91_gst_enable_playing.patch	2008-04-20 19:25:54.000000000 +0200
@@ -0,0 +1,136 @@
+diff -Nur -x '*.orig' -x '*~' old/src/teatime.c old.new/src/teatime.c
+--- old/src/teatime.c	2008-04-20 18:22:02.000000000 +0200
++++ old.new/src/teatime.c	2008-04-20 18:27:15.000000000 +0200
+@@ -88,16 +88,21 @@
+ }
+ 
+ static void
+-popup_hide (GtkWidget *widget, GdkEvent *event, TeatimePopup *popup)
++popup_hide (GtkWidget *widget, GdkEvent *event, Teatime *teatime)
+ {
+-  gtk_timeout_remove (popup->timer_handle);
+-  gtk_widget_hide (popup->cup_window);
+-  gtk_widget_hide (popup->label_window);
+-  popup->visible = FALSE;
++  gtk_timeout_remove (teatime->popup.timer_handle);
++  gtk_widget_hide (teatime->popup.cup_window);
++  gtk_widget_hide (teatime->popup.label_window);  
++
++  GstState state = GST_STATE (teatime->sound);
++  if (state == GST_STATE_PLAYING || state == GST_STATE_PAUSED || GST_STATE_READY)
++    gst_element_set_state (GST_ELEMENT (teatime->sound), GST_STATE_NULL);
++
++  teatime->popup.visible = FALSE;
+ }
+ 
+ static void
+-cup_popup (TeatimePopup *popup)
++cup_popup (Teatime *teatime)
+ {
+   static GdkPixbuf *pixbuf;
+   static GdkPixmap *pixmap;
+@@ -105,20 +110,20 @@
+   GtkWidget *eventbox;
+   gint i;
+     
+-  popup->cup_window = gtk_window_new (GTK_WINDOW_POPUP);
+-  gtk_widget_set_usize (popup->cup_window, CUP_WIDTH, CUP_HEIGHT);
++  teatime->popup.cup_window = gtk_window_new (GTK_WINDOW_POPUP);
++  gtk_widget_set_usize (teatime->popup.cup_window, CUP_WIDTH, CUP_HEIGHT);
+   hbox = gtk_hbox_new (TRUE, 0);
+   for (i=0; i<ROT_FRAMES; i++)
+-    gtk_box_pack_start (GTK_BOX (hbox), popup->image[i], FALSE, FALSE, 0);
+-  gtk_widget_shape_combine_mask (popup->cup_window, popup->bitmap[0], 0, 0);
++    gtk_box_pack_start (GTK_BOX (hbox), teatime->popup.image[i], FALSE, FALSE, 0);
++  gtk_widget_shape_combine_mask (teatime->popup.cup_window, teatime->popup.bitmap[0], 0, 0);
+   eventbox = gtk_event_box_new ();
+   gtk_container_add (GTK_CONTAINER (eventbox), hbox);	
+-  gtk_container_add (GTK_CONTAINER (popup->cup_window), eventbox);
++  gtk_container_add (GTK_CONTAINER (teatime->popup.cup_window), eventbox);
+   g_signal_connect (G_OBJECT (eventbox), "button_release_event",
+-                    G_CALLBACK (popup_hide), popup);
++                    G_CALLBACK (popup_hide), teatime);
+   gtk_widget_show (eventbox);
+   gtk_widget_show (hbox);
+-  gtk_widget_show (popup->image[0]);
++  gtk_widget_show (teatime->popup.image[0]);
+ }
+ 
+ static void
+@@ -273,7 +278,7 @@
+   GstElement *audio_sink;
+   gint center_x, center_y;
+  
+-  if (--teatime->time_left)
++  if (--(teatime->time_left))
+   {
+     animate (teatime);
+     return TRUE;
+@@ -295,7 +300,7 @@
+     if (uri) {
+       g_object_set (G_OBJECT (teatime->sound), "uri", uri, NULL);
+       g_free (uri);
+-      gst_element_set_state (teatime->sound, GST_STATE_PLAYING);
++      gst_element_set_state (GST_ELEMENT (teatime->sound), GST_STATE_PLAYING);
+     }
+   }
+   if (!teatime->properties.popup)
+@@ -312,7 +317,7 @@
+   }
+   else
+   {
+-    cup_popup (&teatime->popup);
++    cup_popup (teatime);
+     label_popup (&teatime->popup, teatime->border);
+   }
+   teatime->popup.frame = 0;    
+@@ -413,7 +418,7 @@
+   if (teatime->timer_handle)
+     gtk_timeout_remove (teatime->timer_handle);
+   if (teatime->popup.visible)
+-    popup_hide (NULL, NULL, &teatime->popup);
++    popup_hide (NULL, NULL, teatime);
+   teatime->full = TRUE;
+   teatime->time_left = teatime->drawing_time * FRAMES;
+   teatime->timer_handle = gtk_timeout_add (333, (GtkFunction)timer, teatime);
+@@ -622,25 +627,25 @@
+   
+   gdk_rgb_init();
+ 
+-  gst_init (0, NULL);
++  gst_init (NULL, NULL);
+ 
+   teatime->sound = gst_element_factory_make ("playbin", "playbin");
+   if (teatime->sound) {
+       GstBus *bus;
+-      GstElement *sink;
+-
+-      sink = gst_element_factory_make ("gconfaudiosink", "audiosink");
+-      if (sink)
+-          g_object_set (G_OBJECT (teatime->sound), "audio-sink", sink, NULL);
+-
+-      sink = gst_element_factory_make ("fakesink", "fakevideosink");
+-      if (sink)
+-          g_object_set (G_OBJECT (teatime->sound), "video-sink", sink, NULL);
+-
+-      sink = gst_element_factory_make ("fakesink", "fakevis");
+-      if (sink)
+-          g_object_set (G_OBJECT (teatime->sound), "vis-plugin", sink, NULL);
+-
++//      GstElement *sink;
++//
++//      sink = gst_element_factory_make ("gconfaudiosink", "audiosink");
++//      if (sink)
++//          g_object_set (G_OBJECT (teatime->sound), "audio-sink", sink, NULL);
++//
++//      sink = gst_element_factory_make ("fakesink", "fakevideosink");
++//      if (sink)
++//          g_object_set (G_OBJECT (teatime->sound), "video-sink", sink, NULL);
++//
++//      sink = gst_element_factory_make ("fakesink", "fakevis");
++//      if (sink)
++//          g_object_set (G_OBJECT (teatime->sound), "vis-plugin", sink, NULL);
++//
+       bus = gst_pipeline_get_bus (GST_PIPELINE (teatime->sound));
+       gst_bus_add_watch (bus, bus_callback, teatime->sound);
+       gst_object_unref (bus);

Reply via email to