fixed race condition in AlbumWindow

This commit is contained in:
Martin Wagner 2020-09-10 23:35:10 +02:00
parent 4cc8c46055
commit 7a2c8cbf12

View File

@ -1462,7 +1462,6 @@ class AlbumWindow(FocusFrame):
self._settings.connect("changed::sort-albums-by-year", self._sort_settings) self._settings.connect("changed::sort-albums-by-year", self._sort_settings)
self._settings.connect("changed::album-cover", self._on_cover_size_changed) self._settings.connect("changed::album-cover", self._on_cover_size_changed)
self._settings.connect("changed::use-album-artist", self._clear) self._settings.connect("changed::use-album-artist", self._clear)
self.connect("done", self._on_done)
self._artist_window.connect("artists_changed", self._refresh) self._artist_window.connect("artists_changed", self._refresh)
self.set_widget(self._iconview) self.set_widget(self._iconview)
@ -1522,7 +1521,10 @@ class AlbumWindow(FocusFrame):
def _refresh(self, *args): def _refresh(self, *args):
def callback(): def callback():
GLib.idle_add(self._workaround_clear) GLib.idle_add(self._workaround_clear)
try: # self._artist_window could still be empty
genre, artists=self._artist_window.get_selected_artists() genre, artists=self._artist_window.get_selected_artists()
except:
GLib.idle_add(self._done_callback)
# show artist names if all albums are shown # show artist names if all albums are shown
if len(artists) > 1: if len(artists) > 1:
self._iconview.set_markup_column(2) self._iconview.set_markup_column(2)
@ -1534,7 +1536,7 @@ class AlbumWindow(FocusFrame):
for artist in artists: for artist in artists:
try: # client cloud meanwhile disconnect try: # client cloud meanwhile disconnect
if self.stop_flag: if self.stop_flag:
GLib.idle_add(self.emit, "done") GLib.idle_add(self._done_callback)
return return
else: else:
if genre is None: if genre is None:
@ -1549,7 +1551,7 @@ class AlbumWindow(FocusFrame):
while Gtk.events_pending(): while Gtk.events_pending():
Gtk.main_iteration_do(True) Gtk.main_iteration_do(True)
except MPDBase.ConnectionError: except MPDBase.ConnectionError:
GLib.idle_add(self.emit, "done") GLib.idle_add(self._done_callback)
return return
# display albums # display albums
if self._settings.get_boolean("sort-albums-by-year"): if self._settings.get_boolean("sort-albums-by-year"):
@ -1585,7 +1587,7 @@ class AlbumWindow(FocusFrame):
if i%16 == 0: if i%16 == 0:
while Gtk.events_pending(): while Gtk.events_pending():
Gtk.main_iteration_do(True) Gtk.main_iteration_do(True)
GLib.idle_add(self.emit, "done") GLib.idle_add(self._done_callback)
if self._done: if self._done:
self._done=False self._done=False
callback() callback()
@ -1608,11 +1610,8 @@ class AlbumWindow(FocusFrame):
album_dialog.open() album_dialog.open()
album_dialog.destroy() album_dialog.destroy()
@GObject.Signal def _done_callback(self, *args):
def done(self):
self.stop_flag=False self.stop_flag=False
def _on_done(self, *args):
self._done=True self._done=True
pending=self._pending pending=self._pending
self._pending=[] self._pending=[]
@ -1621,6 +1620,7 @@ class AlbumWindow(FocusFrame):
p() p()
except: except:
pass pass
return False
def _on_button_press_event(self, widget, event): def _on_button_press_event(self, widget, event):
path=widget.get_path_at_pos(int(event.x), int(event.y)) path=widget.get_path_at_pos(int(event.x), int(event.y))