mirror of
https://github.com/zydeco/minivmac4ios.git
synced 2024-09-27 12:59:00 +00:00
visionOS: show layout menu from keyboard button
This commit is contained in:
parent
53cb92f4ef
commit
ed99d1bbfb
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
@property (weak, nonatomic, nullable) id<KBKeyboardViewDelegate> delegate;
|
@property (weak, nonatomic, nullable) id<KBKeyboardViewDelegate> delegate;
|
||||||
@property (nonatomic, strong, nullable) KBKeyboardLayout *layout;
|
@property (nonatomic, strong, nullable) KBKeyboardLayout *layout;
|
||||||
|
@property (nonatomic, strong, nullable) UIMenu *layoutMenu;
|
||||||
|
|
||||||
@property (nonatomic, readonly, nonnull) NSArray<KBKey*>* keys;
|
@property (nonatomic, readonly, nonnull) NSArray<KBKey*>* keys;
|
||||||
@property (nonatomic, readonly, nonnull) NSArray<KBKey*>* stickyKeys;
|
@property (nonatomic, readonly, nonnull) NSArray<KBKey*>* stickyKeys;
|
||||||
|
@ -126,11 +126,15 @@
|
|||||||
keyFrame.origin.x += safeAreaInsets.left;
|
keyFrame.origin.x += safeAreaInsets.left;
|
||||||
}
|
}
|
||||||
if (scancode == VKC_HIDE) {
|
if (scancode == VKC_HIDE) {
|
||||||
#if defined(TARGET_OS_VISION) && TARGET_OS_VISION == 1
|
|
||||||
// close window to hide
|
|
||||||
return;
|
|
||||||
#else
|
|
||||||
key = [[KBHideKey alloc] initWithFrame:keyFrame];
|
key = [[KBHideKey alloc] initWithFrame:keyFrame];
|
||||||
|
#if defined(TARGET_OS_VISION) && TARGET_OS_VISION == 1
|
||||||
|
if (self.layoutMenu != nil) {
|
||||||
|
key.showsMenuAsPrimaryAction = YES;
|
||||||
|
key.menu = self.layoutMenu;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#else
|
||||||
[key addTarget:self action:@selector(hideKeyboard:) forControlEvents:UIControlEventTouchUpInside];
|
[key addTarget:self action:@selector(hideKeyboard:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
#endif
|
#endif
|
||||||
} else if (scancode == VKC_SHIFT_CAPS) {
|
} else if (scancode == VKC_SHIFT_CAPS) {
|
||||||
|
@ -27,5 +27,6 @@
|
|||||||
@property (nonatomic, readonly) UIViewController* keyboardViewController;
|
@property (nonatomic, readonly) UIViewController* keyboardViewController;
|
||||||
- (void)initXr;
|
- (void)initXr;
|
||||||
+ (void)adjustToScreenSize;
|
+ (void)adjustToScreenSize;
|
||||||
|
- (UIMenu*)keyboardLayoutMenu;
|
||||||
@end
|
@end
|
||||||
#endif
|
#endif
|
||||||
|
@ -67,6 +67,7 @@ API_AVAILABLE(ios(13.4))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
keyboardView = [[KBKeyboardView alloc] initWithFrame:CGRectMake(0, 0, keyboardSize.width, keyboardSize.height)];
|
keyboardView = [[KBKeyboardView alloc] initWithFrame:CGRectMake(0, 0, keyboardSize.width, keyboardSize.height)];
|
||||||
|
keyboardView.layoutMenu = [self keyboardLayoutMenu];
|
||||||
keyboardView.layout = layout;
|
keyboardView.layout = layout;
|
||||||
keyboardView.delegate = self;
|
keyboardView.delegate = self;
|
||||||
}
|
}
|
||||||
|
@ -62,5 +62,21 @@ extension ViewController {
|
|||||||
resizingRestrictions: .uniform
|
resizingRestrictions: .uniform
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc
|
||||||
|
func keyboardLayoutMenu() -> UIMenu {
|
||||||
|
let layouts = AppDelegate.shared.keyboardLayoutPaths ?? []
|
||||||
|
let items: [UIMenuElement] = layouts.map({ path in
|
||||||
|
UIDeferredMenuElement.uncached { completion in
|
||||||
|
let layoutId = (path as NSString).lastPathComponent
|
||||||
|
let displayName = (layoutId as NSString).deletingPathExtension
|
||||||
|
let selected = UserDefaults.standard.string(forKey: "keyboardLayout") == layoutId
|
||||||
|
completion([UIAction(title: displayName, state: selected ? .on : .off) { _ in
|
||||||
|
UserDefaults.standard.setValue(layoutId, forKey: "keyboardLayout")
|
||||||
|
}])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return UIMenu(title: "Layout", options: [], children: items)
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user