Package: teatime
Version: 2.8.0-4

Hello,

The fix for teatime, which is attached in bug 480666, is a diff
between old and new source tree. Currently, it is in source tree as
debian/patches/99_sound_play_stop.diff. When patch target in
debian/rules is run, it just adds
debian/patches/91_gst_enable_playing.patch, so the actual patch
doesn't get applied. I attached 91_gst_enable_playing.patch in this
mail.

Thanks for looking into it.
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