summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2017-09-17 11:35:26 +0200
committerJosJuice <josjuice@gmail.com>2017-09-17 11:44:48 +0200
commite4faabb763520d57c27cfdc827ce5e5b0b896d94 (patch)
treeb42726ffc2164c25d1e59e2e04000b2df6c909fb
parent3c770693a28daa3526ed64900641301799660b93 (diff)
Add an option to eject the disc
-rw-r--r--Source/Core/Core/HW/DVD/DVDInterface.cpp10
-rw-r--r--Source/Core/Core/HW/DVD/DVDInterface.h1
-rw-r--r--Source/Core/Core/HotkeyManager.cpp1
-rw-r--r--Source/Core/Core/HotkeyManager.h1
-rw-r--r--Source/Core/DolphinWX/Frame.cpp3
-rw-r--r--Source/Core/DolphinWX/Frame.h1
-rw-r--r--Source/Core/DolphinWX/FrameTools.cpp6
-rw-r--r--Source/Core/DolphinWX/Globals.h1
-rw-r--r--Source/Core/DolphinWX/MainMenuBar.cpp1
9 files changed, 23 insertions, 2 deletions
diff --git a/Source/Core/Core/HW/DVD/DVDInterface.cpp b/Source/Core/Core/HW/DVD/DVDInterface.cpp
index 192f93d8fd..853026a92e 100644
--- a/Source/Core/Core/HW/DVD/DVDInterface.cpp
+++ b/Source/Core/Core/HW/DVD/DVDInterface.cpp
@@ -469,6 +469,12 @@ static void InsertDiscCallback(u64 userdata, s64 cyclesLate)
}
// Must only be called on the CPU thread
+void EjectDisc()
+{
+ CoreTiming::ScheduleEvent(0, s_eject_disc);
+}
+
+// Must only be called on the CPU thread
void ChangeDisc(const std::string& new_path)
{
if (!s_disc_path_to_insert.empty())
@@ -477,10 +483,10 @@ void ChangeDisc(const std::string& new_path)
return;
}
+ EjectDisc();
+
s_disc_path_to_insert = new_path;
- CoreTiming::ScheduleEvent(0, s_eject_disc);
CoreTiming::ScheduleEvent(SystemTimers::GetTicksPerSecond(), s_insert_disc);
-
Movie::SignalDiscChange(new_path);
}
diff --git a/Source/Core/Core/HW/DVD/DVDInterface.h b/Source/Core/Core/HW/DVD/DVDInterface.h
index 091d55a8a1..fc23fb8bbd 100644
--- a/Source/Core/Core/HW/DVD/DVDInterface.h
+++ b/Source/Core/Core/HW/DVD/DVDInterface.h
@@ -113,6 +113,7 @@ void RegisterMMIO(MMIO::Mapping* mmio, u32 base);
void SetDisc(std::unique_ptr<DiscIO::Volume> disc);
bool IsDiscInside();
+void EjectDisc(); // Must only be called on the CPU thread
void ChangeDisc(const std::string& new_path); // Must only be called on the CPU thread
// This function returns true and calls SConfig::SetRunningGameMetadata(Volume&, Partition&)
diff --git a/Source/Core/Core/HotkeyManager.cpp b/Source/Core/Core/HotkeyManager.cpp
index 89c394deb7..0edd84bdf3 100644
--- a/Source/Core/Core/HotkeyManager.cpp
+++ b/Source/Core/Core/HotkeyManager.cpp
@@ -23,6 +23,7 @@
const std::string hotkey_labels[] = {
_trans("Open"),
_trans("Change Disc"),
+ _trans("Eject Disc"),
_trans("Refresh List"),
_trans("Toggle Pause"),
_trans("Stop"),
diff --git a/Source/Core/Core/HotkeyManager.h b/Source/Core/Core/HotkeyManager.h
index 10dbb9ccf4..f9b4dabaf5 100644
--- a/Source/Core/Core/HotkeyManager.h
+++ b/Source/Core/Core/HotkeyManager.h
@@ -21,6 +21,7 @@ enum Hotkey
{
HK_OPEN,
HK_CHANGE_DISC,
+ HK_EJECT_DISC,
HK_REFRESH_LIST,
HK_PLAY_PAUSE,
HK_STOP,
diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp
index dd30bbd31c..c4f9cd7dd1 100644
--- a/Source/Core/DolphinWX/Frame.cpp
+++ b/Source/Core/DolphinWX/Frame.cpp
@@ -961,6 +961,8 @@ static int GetMenuIDFromHotkey(unsigned int key)
return wxID_OPEN;
case HK_CHANGE_DISC:
return IDM_CHANGE_DISC;
+ case HK_EJECT_DISC:
+ return IDM_EJECT_DISC;
case HK_REFRESH_LIST:
return wxID_REFRESH;
case HK_PLAY_PAUSE:
@@ -1305,6 +1307,7 @@ void CFrame::ParseHotkeys()
{
case HK_OPEN:
case HK_CHANGE_DISC:
+ case HK_EJECT_DISC:
case HK_REFRESH_LIST:
case HK_RESET:
case HK_START_RECORDING:
diff --git a/Source/Core/DolphinWX/Frame.h b/Source/Core/DolphinWX/Frame.h
index cb5364155d..a7005841ef 100644
--- a/Source/Core/DolphinWX/Frame.h
+++ b/Source/Core/DolphinWX/Frame.h
@@ -299,6 +299,7 @@ private:
void OnShowInputDisplay(wxCommandEvent& event);
void OnShowRTCDisplay(wxCommandEvent& event);
void OnChangeDisc(wxCommandEvent& event);
+ void OnEjectDisc(wxCommandEvent& event);
void OnScreenshot(wxCommandEvent& event);
void OnActive(wxActivateEvent& event);
void OnClose(wxCloseEvent& event);
diff --git a/Source/Core/DolphinWX/FrameTools.cpp b/Source/Core/DolphinWX/FrameTools.cpp
index 4c60ff9888..0db98e74ea 100644
--- a/Source/Core/DolphinWX/FrameTools.cpp
+++ b/Source/Core/DolphinWX/FrameTools.cpp
@@ -127,6 +127,7 @@ void CFrame::BindMenuBarEvents()
// File menu
Bind(wxEVT_MENU, &CFrame::OnOpen, this, wxID_OPEN);
Bind(wxEVT_MENU, &CFrame::OnChangeDisc, this, IDM_CHANGE_DISC);
+ Bind(wxEVT_MENU, &CFrame::OnEjectDisc, this, IDM_EJECT_DISC);
Bind(wxEVT_MENU, &CFrame::OnBootDrive, this, IDM_DRIVE1, IDM_DRIVE24);
Bind(wxEVT_MENU, &CFrame::OnRefresh, this, wxID_REFRESH);
Bind(wxEVT_MENU, &CFrame::OnQuit, this, wxID_EXIT);
@@ -459,6 +460,11 @@ void CFrame::OnChangeDisc(wxCommandEvent& WXUNUSED(event))
DoOpen(false);
}
+void CFrame::OnEjectDisc(wxCommandEvent& WXUNUSED(event))
+{
+ Core::RunAsCPUThread(DVDInterface::EjectDisc);
+}
+
void CFrame::OnRecord(wxCommandEvent& WXUNUSED(event))
{
if ((!Core::IsRunningAndStarted() && Core::IsRunning()) || Movie::IsRecordingInput() ||
diff --git a/Source/Core/DolphinWX/Globals.h b/Source/Core/DolphinWX/Globals.h
index b72cf2686b..dad9550cd7 100644
--- a/Source/Core/DolphinWX/Globals.h
+++ b/Source/Core/DolphinWX/Globals.h
@@ -94,6 +94,7 @@ enum
IDM_CHEATS,
IDM_NETPLAY,
IDM_RESTART,
+ IDM_EJECT_DISC,
IDM_CHANGE_DISC,
IDM_LIST_CHANGE_DISC,
IDM_PROPERTIES,
diff --git a/Source/Core/DolphinWX/MainMenuBar.cpp b/Source/Core/DolphinWX/MainMenuBar.cpp
index 71504bf5be..c9b505e891 100644
--- a/Source/Core/DolphinWX/MainMenuBar.cpp
+++ b/Source/Core/DolphinWX/MainMenuBar.cpp
@@ -79,6 +79,7 @@ wxMenu* MainMenuBar::CreateFileMenu() const
auto* const file_menu = new wxMenu;
file_menu->Append(wxID_OPEN, _("&Open..."));
file_menu->Append(IDM_CHANGE_DISC, _("Change &Disc..."));
+ file_menu->Append(IDM_EJECT_DISC, _("Eject Disc"));
file_menu->Append(IDM_DRIVES, _("&Boot from DVD Backup"), external_drive_menu);
file_menu->AppendSeparator();
file_menu->Append(wxID_REFRESH, _("&Refresh Game List"));