mirror of
https://github.com/utmapp/UTM.git
synced 2026-10-12 02:24:01 +00:00
input(iOS): let the controller Options and Home buttons be mapped
Only the Menu button could be mapped to the guest. Options and Home were left out because the system uses them for its own gestures (screenshots, recording, opening the game overlay), so a press never did anything useful for the guest. Add both to the gamepad settings with the same choices as the other buttons. They default to Disabled, which leaves the system gestures alone. Once a button is mapped we ask the system to give up its gesture through preferredSystemGestureState, which the system honours according to the user's Home button setting. Not tested with a physical controller. Assisted-by: Claude:claude-fable-5-1
This commit is contained in:
@@ -23,6 +23,9 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (void)initGamepad;
|
||||
|
||||
/// Takes the buttons mapped to the guest away from the system, or gives them back.
|
||||
- (void)setSystemGestureButtonsClaimed:(BOOL)isClaimed;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -127,6 +127,25 @@ const CGFloat kThumbstickSpeedMultiplier = 1000; // in points per second
|
||||
gamepad.buttonMenu.pressedChangedHandler = ^(GCControllerButtonInput * _Nonnull button, float value, BOOL pressed) {
|
||||
[_self gamepadButton:@"GCButtonMenu" pressed:pressed];
|
||||
};
|
||||
|
||||
gamepad.buttonOptions.pressedChangedHandler = ^(GCControllerButtonInput * _Nonnull button, float value, BOOL pressed) {
|
||||
[_self gamepadButton:@"GCButtonOptions" pressed:pressed];
|
||||
};
|
||||
|
||||
gamepad.buttonHome.pressedChangedHandler = ^(GCControllerButtonInput * _Nonnull button, float value, BOOL pressed) {
|
||||
[_self gamepadButton:@"GCButtonHome" pressed:pressed];
|
||||
};
|
||||
|
||||
[self setSystemGestureButtonsClaimed:YES];
|
||||
}
|
||||
|
||||
- (void)setSystemGestureButtonsClaimed:(BOOL)isClaimed {
|
||||
// the system uses these buttons for its own gestures, so we only ask for them while they are mapped to the guest
|
||||
GCExtendedGamepad *gamepad = self.controller.extendedGamepad;
|
||||
BOOL isOptionsClaimed = isClaimed && [self integerForSetting:@"GCButtonOptions"] != 0;
|
||||
BOOL isHomeClaimed = isClaimed && [self integerForSetting:@"GCButtonHome"] != 0;
|
||||
gamepad.buttonOptions.preferredSystemGestureState = isOptionsClaimed ? GCSystemGestureStateDisabled : GCSystemGestureStateEnabled;
|
||||
gamepad.buttonHome.preferredSystemGestureState = isHomeClaimed ? GCSystemGestureStateDisabled : GCSystemGestureStateEnabled;
|
||||
}
|
||||
|
||||
- (void)gamepadButton:(NSString *)identifier pressed:(BOOL)isPressed {
|
||||
|
||||
@@ -112,6 +112,7 @@ static const NSInteger kResizeTimeoutSecs = 5;
|
||||
#if !TARGET_OS_VISION
|
||||
[self startGCMouse];
|
||||
#endif
|
||||
[self setSystemGestureButtonsClaimed:YES];
|
||||
[self.vmDisplay addRenderer:self.renderer];
|
||||
}
|
||||
|
||||
@@ -120,6 +121,7 @@ static const NSInteger kResizeTimeoutSecs = 5;
|
||||
#if !TARGET_OS_VISION
|
||||
[self stopGCMouse];
|
||||
#endif
|
||||
[self setSystemGestureButtonsClaimed:NO];
|
||||
[self.vmDisplay removeRenderer:self.renderer];
|
||||
[self removeObserver:self forKeyPath:@"vmDisplay.displaySize"];
|
||||
}
|
||||
|
||||
@@ -661,6 +661,370 @@
|
||||
<integer>88</integer>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSMultiValueSpecifier</string>
|
||||
<key>Title</key>
|
||||
<string>Options</string>
|
||||
<key>Key</key>
|
||||
<string>GCButtonOptions</string>
|
||||
<key>DefaultValue</key>
|
||||
<integer>0</integer>
|
||||
<key>Titles</key>
|
||||
<array>
|
||||
<string>Disabled</string>
|
||||
<string>Mouse Left Button</string>
|
||||
<string>Mouse Right Button</string>
|
||||
<string>Mouse Middle Button</string>
|
||||
<string>Ctrl</string>
|
||||
<string>Command/Windows</string>
|
||||
<string>Option/Alt</string>
|
||||
<string>Shift</string>
|
||||
<string>Tab</string>
|
||||
<string>Space</string>
|
||||
<string>Enter</string>
|
||||
<string>Backspace</string>
|
||||
<string>Esc</string>
|
||||
<string>Caps</string>
|
||||
<string>`</string>
|
||||
<string>1</string>
|
||||
<string>2</string>
|
||||
<string>3</string>
|
||||
<string>4</string>
|
||||
<string>5</string>
|
||||
<string>6</string>
|
||||
<string>7</string>
|
||||
<string>8</string>
|
||||
<string>9</string>
|
||||
<string>0</string>
|
||||
<string>-</string>
|
||||
<string>=</string>
|
||||
<string>[</string>
|
||||
<string>]</string>
|
||||
<string>;</string>
|
||||
<string>'</string>
|
||||
<string>\</string>
|
||||
<string>,</string>
|
||||
<string>.</string>
|
||||
<string>/</string>
|
||||
<string>Ins</string>
|
||||
<string>Home</string>
|
||||
<string>PgUp</string>
|
||||
<string>PgDn</string>
|
||||
<string>Del</string>
|
||||
<string>End</string>
|
||||
<string>Up</string>
|
||||
<string>Left</string>
|
||||
<string>Down</string>
|
||||
<string>Right</string>
|
||||
<string>A</string>
|
||||
<string>B</string>
|
||||
<string>C</string>
|
||||
<string>D</string>
|
||||
<string>E</string>
|
||||
<string>F</string>
|
||||
<string>G</string>
|
||||
<string>H</string>
|
||||
<string>I</string>
|
||||
<string>J</string>
|
||||
<string>K</string>
|
||||
<string>L</string>
|
||||
<string>M</string>
|
||||
<string>N</string>
|
||||
<string>O</string>
|
||||
<string>P</string>
|
||||
<string>Q</string>
|
||||
<string>R</string>
|
||||
<string>S</string>
|
||||
<string>T</string>
|
||||
<string>U</string>
|
||||
<string>V</string>
|
||||
<string>W</string>
|
||||
<string>X</string>
|
||||
<string>Y</string>
|
||||
<string>Z</string>
|
||||
<string>F1</string>
|
||||
<string>F2</string>
|
||||
<string>F3</string>
|
||||
<string>F4</string>
|
||||
<string>F5</string>
|
||||
<string>F6</string>
|
||||
<string>F7</string>
|
||||
<string>F8</string>
|
||||
<string>F9</string>
|
||||
<string>F10</string>
|
||||
<string>F11</string>
|
||||
<string>F12</string>
|
||||
</array>
|
||||
<key>Values</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>-1</integer>
|
||||
<integer>-3</integer>
|
||||
<integer>-2</integer>
|
||||
<integer>29</integer>
|
||||
<integer>57435</integer>
|
||||
<integer>56</integer>
|
||||
<integer>42</integer>
|
||||
<integer>15</integer>
|
||||
<integer>57</integer>
|
||||
<integer>28</integer>
|
||||
<integer>14</integer>
|
||||
<integer>1</integer>
|
||||
<integer>58</integer>
|
||||
<integer>41</integer>
|
||||
<integer>2</integer>
|
||||
<integer>3</integer>
|
||||
<integer>4</integer>
|
||||
<integer>5</integer>
|
||||
<integer>6</integer>
|
||||
<integer>7</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>12</integer>
|
||||
<integer>13</integer>
|
||||
<integer>26</integer>
|
||||
<integer>27</integer>
|
||||
<integer>39</integer>
|
||||
<integer>40</integer>
|
||||
<integer>43</integer>
|
||||
<integer>51</integer>
|
||||
<integer>52</integer>
|
||||
<integer>53</integer>
|
||||
<integer>57426</integer>
|
||||
<integer>57415</integer>
|
||||
<integer>57417</integer>
|
||||
<integer>57425</integer>
|
||||
<integer>57427</integer>
|
||||
<integer>57423</integer>
|
||||
<integer>200</integer>
|
||||
<integer>203</integer>
|
||||
<integer>208</integer>
|
||||
<integer>205</integer>
|
||||
<integer>30</integer>
|
||||
<integer>48</integer>
|
||||
<integer>46</integer>
|
||||
<integer>32</integer>
|
||||
<integer>18</integer>
|
||||
<integer>33</integer>
|
||||
<integer>34</integer>
|
||||
<integer>35</integer>
|
||||
<integer>23</integer>
|
||||
<integer>36</integer>
|
||||
<integer>37</integer>
|
||||
<integer>38</integer>
|
||||
<integer>50</integer>
|
||||
<integer>49</integer>
|
||||
<integer>24</integer>
|
||||
<integer>25</integer>
|
||||
<integer>16</integer>
|
||||
<integer>19</integer>
|
||||
<integer>31</integer>
|
||||
<integer>20</integer>
|
||||
<integer>22</integer>
|
||||
<integer>47</integer>
|
||||
<integer>17</integer>
|
||||
<integer>45</integer>
|
||||
<integer>21</integer>
|
||||
<integer>44</integer>
|
||||
<integer>59</integer>
|
||||
<integer>60</integer>
|
||||
<integer>61</integer>
|
||||
<integer>62</integer>
|
||||
<integer>63</integer>
|
||||
<integer>64</integer>
|
||||
<integer>65</integer>
|
||||
<integer>66</integer>
|
||||
<integer>67</integer>
|
||||
<integer>68</integer>
|
||||
<integer>87</integer>
|
||||
<integer>88</integer>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSMultiValueSpecifier</string>
|
||||
<key>Title</key>
|
||||
<string>Home</string>
|
||||
<key>Key</key>
|
||||
<string>GCButtonHome</string>
|
||||
<key>DefaultValue</key>
|
||||
<integer>0</integer>
|
||||
<key>Titles</key>
|
||||
<array>
|
||||
<string>Disabled</string>
|
||||
<string>Mouse Left Button</string>
|
||||
<string>Mouse Right Button</string>
|
||||
<string>Mouse Middle Button</string>
|
||||
<string>Ctrl</string>
|
||||
<string>Command/Windows</string>
|
||||
<string>Option/Alt</string>
|
||||
<string>Shift</string>
|
||||
<string>Tab</string>
|
||||
<string>Space</string>
|
||||
<string>Enter</string>
|
||||
<string>Backspace</string>
|
||||
<string>Esc</string>
|
||||
<string>Caps</string>
|
||||
<string>`</string>
|
||||
<string>1</string>
|
||||
<string>2</string>
|
||||
<string>3</string>
|
||||
<string>4</string>
|
||||
<string>5</string>
|
||||
<string>6</string>
|
||||
<string>7</string>
|
||||
<string>8</string>
|
||||
<string>9</string>
|
||||
<string>0</string>
|
||||
<string>-</string>
|
||||
<string>=</string>
|
||||
<string>[</string>
|
||||
<string>]</string>
|
||||
<string>;</string>
|
||||
<string>'</string>
|
||||
<string>\</string>
|
||||
<string>,</string>
|
||||
<string>.</string>
|
||||
<string>/</string>
|
||||
<string>Ins</string>
|
||||
<string>Home</string>
|
||||
<string>PgUp</string>
|
||||
<string>PgDn</string>
|
||||
<string>Del</string>
|
||||
<string>End</string>
|
||||
<string>Up</string>
|
||||
<string>Left</string>
|
||||
<string>Down</string>
|
||||
<string>Right</string>
|
||||
<string>A</string>
|
||||
<string>B</string>
|
||||
<string>C</string>
|
||||
<string>D</string>
|
||||
<string>E</string>
|
||||
<string>F</string>
|
||||
<string>G</string>
|
||||
<string>H</string>
|
||||
<string>I</string>
|
||||
<string>J</string>
|
||||
<string>K</string>
|
||||
<string>L</string>
|
||||
<string>M</string>
|
||||
<string>N</string>
|
||||
<string>O</string>
|
||||
<string>P</string>
|
||||
<string>Q</string>
|
||||
<string>R</string>
|
||||
<string>S</string>
|
||||
<string>T</string>
|
||||
<string>U</string>
|
||||
<string>V</string>
|
||||
<string>W</string>
|
||||
<string>X</string>
|
||||
<string>Y</string>
|
||||
<string>Z</string>
|
||||
<string>F1</string>
|
||||
<string>F2</string>
|
||||
<string>F3</string>
|
||||
<string>F4</string>
|
||||
<string>F5</string>
|
||||
<string>F6</string>
|
||||
<string>F7</string>
|
||||
<string>F8</string>
|
||||
<string>F9</string>
|
||||
<string>F10</string>
|
||||
<string>F11</string>
|
||||
<string>F12</string>
|
||||
</array>
|
||||
<key>Values</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>-1</integer>
|
||||
<integer>-3</integer>
|
||||
<integer>-2</integer>
|
||||
<integer>29</integer>
|
||||
<integer>57435</integer>
|
||||
<integer>56</integer>
|
||||
<integer>42</integer>
|
||||
<integer>15</integer>
|
||||
<integer>57</integer>
|
||||
<integer>28</integer>
|
||||
<integer>14</integer>
|
||||
<integer>1</integer>
|
||||
<integer>58</integer>
|
||||
<integer>41</integer>
|
||||
<integer>2</integer>
|
||||
<integer>3</integer>
|
||||
<integer>4</integer>
|
||||
<integer>5</integer>
|
||||
<integer>6</integer>
|
||||
<integer>7</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>12</integer>
|
||||
<integer>13</integer>
|
||||
<integer>26</integer>
|
||||
<integer>27</integer>
|
||||
<integer>39</integer>
|
||||
<integer>40</integer>
|
||||
<integer>43</integer>
|
||||
<integer>51</integer>
|
||||
<integer>52</integer>
|
||||
<integer>53</integer>
|
||||
<integer>57426</integer>
|
||||
<integer>57415</integer>
|
||||
<integer>57417</integer>
|
||||
<integer>57425</integer>
|
||||
<integer>57427</integer>
|
||||
<integer>57423</integer>
|
||||
<integer>200</integer>
|
||||
<integer>203</integer>
|
||||
<integer>208</integer>
|
||||
<integer>205</integer>
|
||||
<integer>30</integer>
|
||||
<integer>48</integer>
|
||||
<integer>46</integer>
|
||||
<integer>32</integer>
|
||||
<integer>18</integer>
|
||||
<integer>33</integer>
|
||||
<integer>34</integer>
|
||||
<integer>35</integer>
|
||||
<integer>23</integer>
|
||||
<integer>36</integer>
|
||||
<integer>37</integer>
|
||||
<integer>38</integer>
|
||||
<integer>50</integer>
|
||||
<integer>49</integer>
|
||||
<integer>24</integer>
|
||||
<integer>25</integer>
|
||||
<integer>16</integer>
|
||||
<integer>19</integer>
|
||||
<integer>31</integer>
|
||||
<integer>20</integer>
|
||||
<integer>22</integer>
|
||||
<integer>47</integer>
|
||||
<integer>17</integer>
|
||||
<integer>45</integer>
|
||||
<integer>21</integer>
|
||||
<integer>44</integer>
|
||||
<integer>59</integer>
|
||||
<integer>60</integer>
|
||||
<integer>61</integer>
|
||||
<integer>62</integer>
|
||||
<integer>63</integer>
|
||||
<integer>64</integer>
|
||||
<integer>65</integer>
|
||||
<integer>66</integer>
|
||||
<integer>67</integer>
|
||||
<integer>68</integer>
|
||||
<integer>87</integer>
|
||||
<integer>88</integer>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSMultiValueSpecifier</string>
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user