summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-10-14 12:46:15 +0100
committerCarl Hetherington <cth@carlh.net>2013-10-14 12:46:15 +0100
commitc439745bf1a1a38d0fc99ed18e2726730790973b (patch)
tree735ceb6233af308f7a23043fd6f604b84df4ebf0 /src
parent0cb4b0621cb7f24a1a8c39fd81984b9ef79f0d7d (diff)
Prevent crashes when coming out of the add screen dialog without giving a certificate.
Diffstat (limited to 'src')
-rw-r--r--src/wx/kdm_dialog.cc4
-rw-r--r--src/wx/screen_dialog.cc15
-rw-r--r--src/wx/screen_dialog.h3
3 files changed, 18 insertions, 4 deletions
diff --git a/src/wx/kdm_dialog.cc b/src/wx/kdm_dialog.cc
index 6164f7fd9..02b91a1e2 100644
--- a/src/wx/kdm_dialog.cc
+++ b/src/wx/kdm_dialog.cc
@@ -276,7 +276,9 @@ KDMDialog::add_screen_clicked ()
shared_ptr<Cinema> c = selected_cinemas().front().second;
ScreenDialog* d = new ScreenDialog (this, "Add Screen");
- d->ShowModal ();
+ if (d->ShowModal () != wxID_OK) {
+ return;
+ }
shared_ptr<Screen> s (new Screen (d->name(), d->certificate()));
c->add_screen (s);
diff --git a/src/wx/screen_dialog.cc b/src/wx/screen_dialog.cc
index 6584e1ad6..32a0bce43 100644
--- a/src/wx/screen_dialog.cc
+++ b/src/wx/screen_dialog.cc
@@ -65,7 +65,9 @@ ScreenDialog::ScreenDialog (wxWindow* parent, string title, string name, shared_
overall_sizer->Layout ();
overall_sizer->SetSizeHints (this);
- _certificate_load->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (ScreenDialog::load_certificate), 0, this);
+ _certificate_load->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&ScreenDialog::load_certificate, this));
+
+ setup_sensitivity ();
}
string
@@ -81,7 +83,7 @@ ScreenDialog::certificate () const
}
void
-ScreenDialog::load_certificate (wxCommandEvent &)
+ScreenDialog::load_certificate ()
{
wxFileDialog* d = new wxFileDialog (this, _("Select Certificate File"));
@@ -95,4 +97,13 @@ ScreenDialog::load_certificate (wxCommandEvent &)
}
d->Destroy ();
+
+ setup_sensitivity ();
+}
+
+void
+ScreenDialog::setup_sensitivity ()
+{
+ wxButton* ok = dynamic_cast<wxButton*> (FindWindowById (wxID_OK, this));
+ ok->Enable (_certificate);
}
diff --git a/src/wx/screen_dialog.h b/src/wx/screen_dialog.h
index 1bd4a89a9..271ae2055 100644
--- a/src/wx/screen_dialog.h
+++ b/src/wx/screen_dialog.h
@@ -30,7 +30,8 @@ public:
boost::shared_ptr<libdcp::Certificate> certificate () const;
private:
- void load_certificate (wxCommandEvent &);
+ void load_certificate ();
+ void setup_sensitivity ();
wxTextCtrl* _name;
wxButton* _certificate_load;