rhythmbox r6293 - in trunk: . plugins/lyrics/lyrics



Author: jmatthew
Date: Wed Apr 15 09:36:21 2009
New Revision: 6293
URL: http://svn.gnome.org/viewvc/rhythmbox?rev=6293&view=rev

Log:
2009-04-15  Jonathan Matthew  <jonathan d14n org>

	* plugins/lyrics/lyrics/__init__.py:
	Use callback methods on the window/pane object, rather than just the
	text buffer.  Previously, if the window was destroyed while the search
	was in progress, the text buffer was kept alive by the reference in
	the callback.  gail expects the text buffer to be destroyed along with
	the text view widget, and crashes if it isn't.  Fixes #473757
	properly.


Modified:
   trunk/ChangeLog
   trunk/plugins/lyrics/lyrics/__init__.py

Modified: trunk/plugins/lyrics/lyrics/__init__.py
==============================================================================
--- trunk/plugins/lyrics/lyrics/__init__.py	(original)
+++ trunk/plugins/lyrics/lyrics/__init__.py	Wed Apr 15 09:36:21 2009
@@ -248,13 +248,16 @@
 		self.visible = 1
 		self.get_lyrics()
 
+	def __got_lyrics(self, text):
+		self.buffer.set_text(text)
+
 	def get_lyrics(self):
 		if self.entry is None:
 			return
 
 		self.buffer.set_text(_("Searching for lyrics..."));
 		lyrics_grabber = LyricGrabber(self.db, self.entry)
-		lyrics_grabber.search_lyrics(self.buffer.set_text)
+		lyrics_grabber.search_lyrics(self.__got_lyrics)
 			
 
 class LyricWindow (gtk.Window):
@@ -339,6 +342,11 @@
 		else:
 			self.action.set_sensitive (False)
 
+	def __got_lyrics(self, text):
+		# don't do anything if the window has already been destroyed
+		if self.window is not None:
+			self.window.buffer.set_text (text)
+
 	def update_song_lyrics(self, entry):
 		if entry == self.current_entry:
 			return
@@ -353,7 +361,7 @@
 
 		self.window.s_title(title, artist)
 		lyrics_grabber = LyricGrabber(db, entry)
-		lyrics_grabber.search_lyrics(self.window.buffer.set_text)
+		lyrics_grabber.search_lyrics(self.__got_lyrics)
 
 	def show_song_lyrics (self, action, shell):
 
@@ -375,7 +383,7 @@
 		self.window.s_title(title, artist)
 		self.window.connect("destroy", self.window_deleted)
 		lyrics_grabber = LyricGrabber(db, entry)
-		lyrics_grabber.search_lyrics(self.window.buffer.set_text)
+		lyrics_grabber.search_lyrics(self.__got_lyrics)
 
 	def window_deleted (self, window):
 		print "lyrics window destroyed"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]