Workaround for tab bar content VC not being in responder chain almost ever
Closes #544, #179
This commit is contained in:
parent
20692b0630
commit
242c60d74d
|
@ -484,3 +484,11 @@ extension ConversationViewController: StatusBarTappableViewController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension ConversationViewController: RefreshableViewController {
|
||||||
|
func refresh() {
|
||||||
|
Task {
|
||||||
|
await refreshContext()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -151,6 +151,22 @@ class BaseMainTabBarViewController: UITabBarController, FastAccountSwitcherViewC
|
||||||
return false
|
return false
|
||||||
#endif // !os(visionOS)
|
#endif // !os(visionOS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: Keyboard shortcuts
|
||||||
|
|
||||||
|
override func target(forAction action: Selector, withSender sender: Any?) -> Any? {
|
||||||
|
// This is a silly workaround for when the sidebar is focused (and therefore first responder), which,
|
||||||
|
// unfortunately, is almost always. Because the content view controller then isn't in the responder chain,
|
||||||
|
// we manually delegate to the top view controller if possible.
|
||||||
|
if action == #selector(RefreshableViewController.refresh),
|
||||||
|
let selected = selectedViewController as? NavigationControllerProtocol,
|
||||||
|
let top = selected.topViewController as? RefreshableViewController {
|
||||||
|
return top
|
||||||
|
} else {
|
||||||
|
return super.target(forAction: action, withSender: sender)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension BaseMainTabBarViewController: TuskerNavigationDelegate {
|
extension BaseMainTabBarViewController: TuskerNavigationDelegate {
|
||||||
|
|
|
@ -220,6 +220,19 @@ class MainSplitViewController: UISplitViewController {
|
||||||
compose(editing: nil)
|
compose(editing: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func target(forAction action: Selector, withSender sender: Any?) -> Any? {
|
||||||
|
// This is a silly workaround for when the sidebar is focused (and therefore first responder), which,
|
||||||
|
// unfortunately, is almost always. Because the content view controller then isn't in the responder chain,
|
||||||
|
// we manually delegate to the top view controller if possible.
|
||||||
|
if action == #selector(RefreshableViewController.refresh),
|
||||||
|
traitCollection.horizontalSizeClass == .regular,
|
||||||
|
let top = secondaryNavController.topViewController as? RefreshableViewController {
|
||||||
|
return top
|
||||||
|
} else {
|
||||||
|
return super.target(forAction: action, withSender: sender)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MainSplitViewController: UISplitViewControllerDelegate {
|
extension MainSplitViewController: UISplitViewControllerDelegate {
|
||||||
|
|
|
@ -180,3 +180,9 @@ extension NotificationsPageViewController: StateRestorableViewController {
|
||||||
return currentPage.userActivity(accountID: mastodonController.accountInfo!.id)
|
return currentPage.userActivity(accountID: mastodonController.accountInfo!.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension NotificationsPageViewController: RefreshableViewController {
|
||||||
|
func refresh() {
|
||||||
|
(currentViewController as? RefreshableViewController)?.refresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -393,3 +393,9 @@ extension ProfileViewController: StatusBarTappableViewController {
|
||||||
return currentViewController.handleStatusBarTapped(xPosition: xPosition)
|
return currentViewController.handleStatusBarTapped(xPosition: xPosition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension ProfileViewController: RefreshableViewController {
|
||||||
|
func refresh() {
|
||||||
|
currentViewController.refresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -212,3 +212,9 @@ extension TimelinesPageViewController: StateRestorableViewController {
|
||||||
return (currentViewController as? TimelineViewController)?.stateRestorationActivity()
|
return (currentViewController as? TimelineViewController)?.stateRestorationActivity()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension TimelinesPageViewController: RefreshableViewController {
|
||||||
|
func refresh() {
|
||||||
|
(currentViewController as? RefreshableViewController)?.refresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue