summaryrefslogtreecommitdiff
path: root/src/wx/playlist_controls.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-09-12 01:09:03 +0200
committerCarl Hetherington <cth@carlh.net>2021-09-27 13:41:46 +0200
commit0b791ea708dfa1f5cd44522988dd5efdf2a0b94b (patch)
tree39cb17f7a05b6ef468a6947cee7910a098aa020c /src/wx/playlist_controls.cc
parent10f36696805235c774890a4618b7187dd75750d4 (diff)
Tidy ownership/lifetime of GLVideoView to fix crashes on close.
Diffstat (limited to 'src/wx/playlist_controls.cc')
-rw-r--r--src/wx/playlist_controls.cc37
1 files changed, 27 insertions, 10 deletions
diff --git a/src/wx/playlist_controls.cc b/src/wx/playlist_controls.cc
index d65cb0fcc..129e0ceca 100644
--- a/src/wx/playlist_controls.cc
+++ b/src/wx/playlist_controls.cc
@@ -109,7 +109,7 @@ PlaylistControls::PlaylistControls (wxWindow* parent, shared_ptr<FilmViewer> vie
_previous_button->Bind (wxEVT_BUTTON, boost::bind(&PlaylistControls::previous_clicked, this));
_spl_view->Bind (wxEVT_LIST_ITEM_SELECTED, boost::bind(&PlaylistControls::spl_selection_changed, this));
_spl_view->Bind (wxEVT_LIST_ITEM_DESELECTED, boost::bind(&PlaylistControls::spl_selection_changed, this));
- _viewer->Finished.connect (boost::bind(&PlaylistControls::viewer_finished, this));
+ viewer->Finished.connect (boost::bind(&PlaylistControls::viewer_finished, this));
_refresh_spl_view->Bind (wxEVT_BUTTON, boost::bind(&PlaylistControls::update_playlist_directory, this));
_refresh_content_view->Bind (wxEVT_BUTTON, boost::bind(&ContentView::update, _content_view));
@@ -148,18 +148,26 @@ PlaylistControls::deselect_playlist ()
void
PlaylistControls::play_clicked ()
{
- _viewer->start ();
+ auto viewer = _viewer.lock ();
+ if (viewer) {
+ viewer->start ();
+ }
}
void
PlaylistControls::setup_sensitivity ()
{
+ auto viewer = _viewer.lock ();
+ if (!viewer) {
+ return;
+ }
+
Controls::setup_sensitivity ();
bool const active_job = _active_job && *_active_job != "examine_content";
bool const c = _film && !_film->content().empty() && !active_job;
- _play_button->Enable (c && !_viewer->playing());
- _pause_button->Enable (_viewer->playing());
- _spl_view->Enable (!_viewer->playing());
+ _play_button->Enable (c && !viewer->playing());
+ _pause_button->Enable (viewer->playing());
+ _spl_view->Enable (!viewer->playing());
_next_button->Enable (can_do_next());
_previous_button->Enable (can_do_previous());
}
@@ -167,14 +175,22 @@ PlaylistControls::setup_sensitivity ()
void
PlaylistControls::pause_clicked ()
{
- _viewer->stop ();
+ auto viewer = _viewer.lock ();
+ if (viewer) {
+ viewer->stop ();
+ }
}
void
PlaylistControls::stop_clicked ()
{
- _viewer->stop ();
- _viewer->seek (DCPTime(), true);
+ auto viewer = _viewer.lock ();
+ if (!viewer) {
+ return;
+ }
+
+ viewer->stop ();
+ viewer->seek (DCPTime(), true);
if (_selected_playlist) {
_selected_playlist_position = 0;
update_current_content ();
@@ -436,7 +452,8 @@ PlaylistControls::update_current_content ()
void
PlaylistControls::viewer_finished ()
{
- if (!_selected_playlist) {
+ auto viewer = _viewer.lock ();
+ if (!_selected_playlist || !viewer) {
return;
}
@@ -444,7 +461,7 @@ PlaylistControls::viewer_finished ()
if (_selected_playlist_position < int(_playlists[*_selected_playlist].get().size())) {
/* Next piece of content on the SPL */
update_current_content ();
- _viewer->start ();
+ viewer->start ();
} else {
/* Finished the whole SPL */
_selected_playlist_position = 0;