[gnome-games] display-view: Add shortcuts for controlling savestates
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games] display-view: Add shortcuts for controlling savestates
- Date: Wed, 14 Aug 2019 16:20:31 +0000 (UTC)
commit 053afd44706d52807cc0e6242d8be09e88658612
Author: Yetizone <andreii lisita gmail com>
Date: Mon Aug 12 18:52:52 2019 +0300
display-view: Add shortcuts for controlling savestates
Ctrl+A or F4 => Reveal the savestates menu
Esc or Alt+left arrow => Hide the savestates menu if it's open
Ctrl+S or F2 => Create new savestate
Ctrl+d or F3 => Load latest savestate
src/ui/display-view.vala | 70 ++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 65 insertions(+), 5 deletions(-)
---
diff --git a/src/ui/display-view.vala b/src/ui/display-view.vala
index 89a8d75b..adf874ef 100644
--- a/src/ui/display-view.vala
+++ b/src/ui/display-view.vala
@@ -101,9 +101,9 @@ private class Games.DisplayView : Object, UiView {
var keymap = Gdk.Keymap.get_for_display (window.get_display ());
keymap.translate_keyboard_state (event.hardware_keycode, event.state,
event.group, out keyval, null, null, null);
+ var ctrl_pressed = (event.state & default_modifiers) == Gdk.ModifierType.CONTROL_MASK;
- if ((keyval == Gdk.Key.f || keyval == Gdk.Key.F) &&
- (event.state & default_modifiers) == Gdk.ModifierType.CONTROL_MASK &&
+ if ((keyval == Gdk.Key.f || keyval == Gdk.Key.F) && ctrl_pressed &&
header_bar.can_fullscreen && !savestates_list_state.is_revealed) {
is_fullscreen = !is_fullscreen;
settings.set_boolean ("fullscreen", is_fullscreen);
@@ -119,9 +119,8 @@ private class Games.DisplayView : Object, UiView {
return true;
}
- if (keyval == Gdk.Key.Escape && header_bar.can_fullscreen) {
- is_fullscreen = false;
- settings.set_boolean ("fullscreen", false);
+ if (keyval == Gdk.Key.Escape) {
+ on_escape_key_pressed ();
return true;
}
@@ -134,9 +133,70 @@ private class Games.DisplayView : Object, UiView {
return true;
}
+ // Shortcuts for the Savestates manager
+ if (savestates_list_state.is_revealed)
+ return false;
+
+ if (((keyval == Gdk.Key.a || keyval == Gdk.Key.A) && ctrl_pressed) ||
+ (keyval == Gdk.Key.F4)) {
+ savestates_list_state.is_revealed = true;
+
+ return true;
+ }
+
+ if (((keyval == Gdk.Key.s || keyval == Gdk.Key.S) && ctrl_pressed) ||
+ (keyval == Gdk.Key.F2)){
+ create_new_savestate ();
+
+ return true;
+ }
+
+ if ((keyval == Gdk.Key.d || keyval == Gdk.Key.D) && ctrl_pressed ||
+ (keyval == Gdk.Key.F3)) {
+ load_latest_savestate ();
+
+ return true;
+ }
+
return false;
}
+ private void on_escape_key_pressed () {
+ if (savestates_list_state.is_revealed)
+ on_display_back (); // Hide Savestates menu
+ else if (header_bar.can_fullscreen) {
+ is_fullscreen = false;
+ settings.set_boolean ("fullscreen", false);
+ }
+ }
+
+ private void create_new_savestate () {
+ box.runner.pause ();
+ box.runner.try_create_savestate (false);
+ box.runner.resume ();
+ box.runner.get_display ().grab_focus ();
+ }
+
+ private void load_latest_savestate () {
+ var savestates = box.runner.get_savestates ();
+
+ if (savestates.length == 0)
+ return;
+
+ box.runner.pause ();
+ box.runner.preview_savestate (savestates[0]);
+
+ try {
+ box.runner.load_previewed_savestate ();
+ }
+ catch (Error e) {
+ warning ("Failed to load savestate: %s", e.message);
+ }
+
+ box.runner.resume ();
+ box.runner.get_display ().grab_focus ();
+ }
+
public bool gamepad_button_press_event (Manette.Event event) {
if (resume_dialog != null)
return resume_dialog.is_active && resume_dialog.gamepad_button_press_event (event);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]