From c5f42719a08121253dab0c0591271cbcb3d48667 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Tue, 30 Jul 2024 22:03:36 -0700 Subject: [PATCH] Fix Cmd+3 not properly selecting Explore tab Having MainSidebarViewController.Item.explore and .tab(.explore) was a mistake and made it easy to accidentally use the wrong one for the key command, so use .tab(.explore) for everything. Closes #519 --- Tusker/MenuController.swift | 2 +- .../Main/MainSidebarViewController.swift | 12 +++---- .../Main/MainSplitViewController.swift | 36 +++++++++---------- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/Tusker/MenuController.swift b/Tusker/MenuController.swift index 24afdff2..0d4068de 100644 --- a/Tusker/MenuController.swift +++ b/Tusker/MenuController.swift @@ -32,7 +32,7 @@ struct MenuController { static let sidebarItemKeyCommands: [UIKeyCommand] = [ sidebarCommand(item: .tab(.timelines), command: "1", action: #selector(MainSplitViewController.handleSidebarCommandTimelines)), sidebarCommand(item: .tab(.notifications), command: "2", action: #selector(MainSplitViewController.handleSidebarCommandNotifications)), - sidebarCommand(item: .explore, command: "3", action: #selector(MainSplitViewController.handleSidebarCommandExplore)), + sidebarCommand(item: .tab(.explore), command: "3", action: #selector(MainSplitViewController.handleSidebarCommandExplore)), sidebarCommand(item: .bookmarks, command: "4", action: #selector(MainSplitViewController.handleSidebarCommandBookmarks)), sidebarCommand(item: .tab(.myProfile), command: "5", action: #selector(MainSplitViewController.handleSidebarCommandMyProfile)), ] diff --git a/Tusker/Screens/Main/MainSidebarViewController.swift b/Tusker/Screens/Main/MainSidebarViewController.swift index b7d8981f..6b0908bc 100644 --- a/Tusker/Screens/Main/MainSidebarViewController.swift +++ b/Tusker/Screens/Main/MainSidebarViewController.swift @@ -43,7 +43,7 @@ class MainSidebarViewController: UIViewController { } var exploreTabItems: [Item] { - var items: [Item] = [.explore, .bookmarks, .favorites] + var items: [Item] = [.tab(.explore), .bookmarks, .favorites] let snapshot = dataSource.snapshot() for case let .list(list) in snapshot.itemIdentifiers(inSection: .lists) { items.append(.list(list)) @@ -170,7 +170,7 @@ class MainSidebarViewController: UIViewController { snapshot.appendItems([ .tab(.timelines), .tab(.notifications), - .explore, + .tab(.explore), .bookmarks, .favorites, .tab(.myProfile) @@ -302,7 +302,7 @@ class MainSidebarViewController: UIViewController { return UserActivityManager.checkNotificationsActivity(mode: Preferences.shared.defaultNotificationsMode, accountID: id) case .tab(.compose): return UserActivityManager.newPostActivity(accountID: id) - case .explore: + case .tab(.explore): return UserActivityManager.searchActivity(query: nil, accountID: id) case .bookmarks: return UserActivityManager.bookmarksActivity(accountID: id) @@ -340,7 +340,7 @@ extension MainSidebarViewController { } enum Item: Hashable { case tab(MainTabBarViewController.Tab) - case explore, bookmarks, favorites + case bookmarks, favorites case listsHeader, list(List), addList case savedHashtagsHeader, savedHashtag(String), addSavedHashtag case savedInstancesHeader, savedInstance(URL), addSavedInstance @@ -349,8 +349,6 @@ extension MainSidebarViewController { switch self { case let .tab(tab): return tab.title - case .explore: - return "Explore" case .bookmarks: return "Bookmarks" case .favorites: @@ -380,8 +378,6 @@ extension MainSidebarViewController { switch self { case let .tab(tab): return tab.imageName - case .explore: - return "magnifyingglass" case .bookmarks: return "bookmark" case .favorites: diff --git a/Tusker/Screens/Main/MainSplitViewController.swift b/Tusker/Screens/Main/MainSplitViewController.swift index f7975ca7..6fafe047 100644 --- a/Tusker/Screens/Main/MainSplitViewController.swift +++ b/Tusker/Screens/Main/MainSplitViewController.swift @@ -279,7 +279,7 @@ extension MainSplitViewController: UISplitViewControllerDelegate { $0.1 > $1.1 } if let mostRecentExploreItem = mostRecentExploreItem?.0, - mostRecentExploreItem != .explore { + mostRecentExploreItem != .tab(.explore) { let exploreNav = tabBarViewController.viewController(for: .explore) as! UINavigationController // Pop back to root, so we're appending to the Explore VC instead of some other VC exploreNav.popToRootViewController(animated: false) @@ -292,11 +292,7 @@ extension MainSplitViewController: UISplitViewControllerDelegate { case nil: break - case let .tab(tab): - // sidebar items that map 1 <-> 1 can be transferred directly - tabBarViewController.select(tab: tab, dismissPresented: false) - - case .explore: + case .tab(.explore): // Search sidebar item maps to the Explore tab with the search controller/results visible // The nav stack can't be copied directly, since the split VC uses a different SearchViewController // so that explore items aren't shown multiple times. @@ -335,10 +331,14 @@ extension MainSplitViewController: UISplitViewControllerDelegate { } // Transfer the navigation stack, dropping the search VC, to keep anything the user has opened - transferNavigationStack(from: .explore, to: exploreNav, dropFirst: true, append: true) + transferNavigationStack(from: .tab(.explore), to: exploreNav, dropFirst: true, append: true) tabBarViewController.select(tab: .explore, dismissPresented: false) + case let .tab(tab): + // sidebar items that map 1 <-> 1 can be transferred directly + tabBarViewController.select(tab: tab, dismissPresented: false) + case .bookmarks, .favorites, .list(_), .savedHashtag(_), .savedInstance(_): tabBarViewController.select(tab: .explore, dismissPresented: false) // Make sure the Explore VC doesn't show its search bar when it appears, in case the user was previously @@ -396,9 +396,9 @@ extension MainSplitViewController: UISplitViewControllerDelegate { // For other items, the 2nd VC in the nav stack determines which sidebar item they map to. // Search screen has special considerations, all others can be transferred directly. if tabNavigationStack.count == 1 || ((tabNavigationStack.first as? ExploreViewController)?.searchController?.isActive ?? false) { - exploreItem = .explore + exploreItem = .tab(.explore) // reuse the existing VC, if there is one - let searchVC = getOrCreateNavigationStack(item: .explore).first! as! InlineTrendsViewController + let searchVC = getOrCreateNavigationStack(item: .tab(.explore)).first! as! InlineTrendsViewController // load the view so that the search controller is accessible searchVC.loadViewIfNeeded() let explore = tabNavigationStack.first as! ExploreViewController @@ -426,16 +426,16 @@ extension MainSplitViewController: UISplitViewControllerDelegate { case let instanceVC as InstanceTimelineViewController: exploreItem = .savedInstance(instanceVC.instanceURL) case is TrendsViewController: - exploreItem = .explore + exploreItem = .tab(.explore) // skip transferring the ExploreViewController and TrendsViewController skipFirst = 2 // prepend the InlineTrendsViewController - toPrepend = getOrCreateNavigationStack(item: .explore).first! + toPrepend = getOrCreateNavigationStack(item: .tab(.explore)).first! default: // transfer the navigation stack prepending, the existing explore VC // if there was other stuff on the explore stack, it will get discarded - toPrepend = getOrCreateNavigationStack(item: .explore).first! - exploreItem = .explore + toPrepend = getOrCreateNavigationStack(item: .tab(.explore)).first! + exploreItem = .tab(.explore) } } transferNavigationStack(from: tabNavController, to: exploreItem!, skipFirst: skipFirst, prepend: toPrepend) @@ -502,10 +502,10 @@ fileprivate extension MainSidebarViewController.Item { @MainActor func createRootViewController(_ mastodonController: MastodonController) -> UIViewController? { switch self { + case .tab(.explore): + return InlineTrendsViewController(mastodonController: mastodonController) case let .tab(tab): return tab.createViewController(mastodonController) - case .explore: - return InlineTrendsViewController(mastodonController: mastodonController) case .bookmarks: return BookmarksViewController(mastodonController: mastodonController) case .favorites: @@ -562,7 +562,7 @@ extension MainSplitViewController: TuskerRootViewController { case .myProfile: item = .tab(.myProfile) case .explore: - item = .explore + item = .tab(.explore) case .bookmarks: item = .bookmarks case .list(id: let id): @@ -616,8 +616,8 @@ extension MainSplitViewController: TuskerRootViewController { return } - if sidebar.selectedItem != .explore { - select(newItem: .explore, oldItem: sidebar.selectedItem) + if sidebar.selectedItem != .tab(.explore) { + select(newItem: .tab(.explore), oldItem: sidebar.selectedItem) } guard let searchViewController = secondaryNavController.viewControllers.first as? InlineTrendsViewController else {