// // xemu User Interface // // Copyright (C) 2020-2022 Matt Borgerson // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #include "common.hh" #include "actions.hh" #include "misc.hh" #include "xemu-hud.h" #include "../xemu-snapshots.h" #include "../xemu-notifications.h" #include "snapshot-manager.hh" void ActionEjectDisc(void) { Error *err = NULL; xemu_eject_disc(&err); if (err) { xemu_queue_error_message(error_get_pretty(err)); error_free(err); } } void ActionLoadDisc(void) { Error *err = NULL; const char *iso_file_filters = ".iso Files\0*.iso\0All Files\0*.*\0"; const char *new_disc_path = PausedFileOpen(NOC_FILE_DIALOG_OPEN, iso_file_filters, g_config.sys.files.dvd_path, NULL); if (new_disc_path == NULL) { /* Cancelled */ return; } xemu_load_disc(new_disc_path, &err); if (err) { xemu_queue_error_message(error_get_pretty(err)); error_free(err); } } void ActionTogglePause(void) { if (runstate_is_running()) { vm_stop(RUN_STATE_PAUSED); } else { vm_start(); } } void ActionReset(void) { qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); } void ActionShutdown(void) { qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI); } void ActionScreenshot(void) { g_screenshot_pending = true; } void ActionActivateBoundSnapshot(int slot, bool save) { assert(slot < 4 && slot >= 0); const char *snapshot_name = *(g_snapshot_shortcut_index_key_map[slot]); if (!snapshot_name || !(snapshot_name[0])) { char *msg = g_strdup_printf("F%d is not bound to a snapshot", slot + 5); xemu_queue_notification(msg); g_free(msg); return; } Error *err = NULL; if (save) { xemu_snapshots_save(snapshot_name, &err); } else { ActionLoadSnapshotChecked(snapshot_name); } if (err) { xemu_queue_error_message(error_get_pretty(err)); error_free(err); } } void ActionLoadSnapshotChecked(const char *name) { g_snapshot_mgr.LoadSnapshotChecked(name); }