summaryrefslogtreecommitdiff
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
parent0cb4b0621cb7f24a1a8c39fd81984b9ef79f0d7d (diff)
Prevent crashes when coming out of the add screen dialog without giving a certificate.
-rw-r--r--ChangeLog7
-rw-r--r--src/wx/kdm_dialog.cc4
-rw-r--r--src/wx/screen_dialog.cc15
-rw-r--r--src/wx/screen_dialog.h3
4 files changed, 24 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index e870f50f0..f7532998c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-10-14 Carl Hetherington <cth@carlh.net>
+
+ * Fix some crashes in the KDM dialogue when coming
+ out of the add screen without giving a certificate.
+
2013-10-13 Carl Hetherington <cth@carlh.net>
* Version 1.14 released.
@@ -7,7 +12,7 @@
* Add some missing libraries to the OS X build.
2013-10-12 Carl Hetherington <cth@carlh.net>
-
+
* Version 1.13 released.
2013-10-12 Carl Hetherington <cth@carlh.net>
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;