Compare commits
2 Commits
Attix-3.0
...
Attractor-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc6b25aab0 | ||
|
|
44cde0018b |
@@ -99,10 +99,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
),
|
),
|
||||||
|
|
||||||
// Find on page
|
// Find on page
|
||||||
UIKeyCommand(
|
(FindOnPageViewController.isEnabled() ?
|
||||||
modifiers: [.command], input: "F",
|
UIKeyCommand(
|
||||||
title: "Find on Page",
|
modifiers: [.command], input: "F",
|
||||||
action: #selector(ShortcutResponder.findOnPage)
|
title: "Find on Page",
|
||||||
|
action: #selector(ShortcutResponder.findOnPage)
|
||||||
|
)
|
||||||
|
: UIKeyCommand()
|
||||||
),
|
),
|
||||||
|
|
||||||
// Refresh
|
// Refresh
|
||||||
|
|||||||
@@ -77,9 +77,17 @@ class BrowserViewController: UIViewController
|
|||||||
|
|
||||||
override func loadView() {
|
override func loadView() {
|
||||||
browserView.toolbarView = toolbarController.toolbarView
|
browserView.toolbarView = toolbarController.toolbarView
|
||||||
browserView.findOnPageView = findOnPageController.findOnPageView
|
|
||||||
browserView.tabBarView = tabBarViewController.tabBarView
|
browserView.tabBarView = tabBarViewController.tabBarView
|
||||||
|
|
||||||
|
if FindOnPageViewController.isEnabled() {
|
||||||
|
browserView.findOnPageView = findOnPageController.findOnPageView
|
||||||
|
|
||||||
|
// Find on page dismiss
|
||||||
|
findOnPageController.findOnPageView.doneButton.addAction(UIAction(handler: { [unowned self] _ in
|
||||||
|
browserView.setFindOnPageVisible(false, animated: true)
|
||||||
|
}), for: .touchUpInside)
|
||||||
|
}
|
||||||
|
|
||||||
// Refresh button
|
// Refresh button
|
||||||
toolbarController.urlBar.refreshButton.addAction(UIAction(handler: { [unowned self] action in
|
toolbarController.urlBar.refreshButton.addAction(UIAction(handler: { [unowned self] action in
|
||||||
if self.webView.isLoading {
|
if self.webView.isLoading {
|
||||||
@@ -220,7 +228,12 @@ class BrowserViewController: UIViewController
|
|||||||
// Find on page
|
// Find on page
|
||||||
documentControls.findOnPageControlView.addAction(UIAction(handler: { [unowned self] _ in
|
documentControls.findOnPageControlView.addAction(UIAction(handler: { [unowned self] _ in
|
||||||
documentControls.dismiss(animated: true, completion: nil)
|
documentControls.dismiss(animated: true, completion: nil)
|
||||||
browserView.setFindOnPageVisible(true, animated: true)
|
|
||||||
|
if FindOnPageViewController.isEnabled() {
|
||||||
|
browserView.setFindOnPageVisible(true, animated: true)
|
||||||
|
} else if #available(iOS 16.0, *) {
|
||||||
|
browserView.webView?._findInteraction.presentFindNavigatorShowingReplace(false)
|
||||||
|
}
|
||||||
}), for: .touchUpInside)
|
}), for: .touchUpInside)
|
||||||
|
|
||||||
// Navigation controls
|
// Navigation controls
|
||||||
@@ -294,11 +307,6 @@ class BrowserViewController: UIViewController
|
|||||||
present(documentControls, animated: true, completion: nil)
|
present(documentControls, animated: true, completion: nil)
|
||||||
}), for: .touchUpInside)
|
}), for: .touchUpInside)
|
||||||
|
|
||||||
// Find on page dismiss
|
|
||||||
findOnPageController.findOnPageView.doneButton.addAction(UIAction(handler: { [unowned self] _ in
|
|
||||||
browserView.setFindOnPageVisible(false, animated: true)
|
|
||||||
}), for: .touchUpInside)
|
|
||||||
|
|
||||||
// Tab controller
|
// Tab controller
|
||||||
activeTabObservation = tabController.$activeTabIndex
|
activeTabObservation = tabController.$activeTabIndex
|
||||||
.receive(on: RunLoop.main)
|
.receive(on: RunLoop.main)
|
||||||
|
|||||||
@@ -9,6 +9,14 @@ import UIKit
|
|||||||
|
|
||||||
class FindOnPageViewController: UIViewController, _WKFindDelegate
|
class FindOnPageViewController: UIViewController, _WKFindDelegate
|
||||||
{
|
{
|
||||||
|
static func isEnabled() -> Bool {
|
||||||
|
if #available(iOS 16.0, *) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
let findOnPageView = FindOnPageView()
|
let findOnPageView = FindOnPageView()
|
||||||
weak var webView: WKWebView? {
|
weak var webView: WKWebView? {
|
||||||
didSet { webView?._findDelegate = self }
|
didSet { webView?._findDelegate = self }
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
public enum SessionActivityType: String {
|
public enum SessionActivityType: String {
|
||||||
case BrowserWindow = "net.buzzert.rossler-attix.browser"
|
case BrowserWindow = "net.buzzert.attractor.browser"
|
||||||
case SettingsWindow = "net.buzzert.rossler-attix.settings"
|
case SettingsWindow = "net.buzzert.attractor.settings"
|
||||||
}
|
}
|
||||||
|
|
||||||
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ protocol NSToolbarDelegate {}
|
|||||||
class SettingsViewController: UITabBarController, NSToolbarDelegate
|
class SettingsViewController: UITabBarController, NSToolbarDelegate
|
||||||
{
|
{
|
||||||
#if targetEnvironment(macCatalyst)
|
#if targetEnvironment(macCatalyst)
|
||||||
let toolbar = NSToolbar(identifier: NSToolbar.Identifier("net.buzzert.rossler-attix.preferences-toolbar"))
|
let toolbar = NSToolbar(identifier: NSToolbar.Identifier("net.buzzert.attractor.preferences-toolbar"))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
init(windowScene: UIWindowScene) {
|
init(windowScene: UIWindowScene) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>rössler\\attix</string>
|
<string>$(PRODUCT_NAME)</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
<key>CFBundleTypeRole</key>
|
<key>CFBundleTypeRole</key>
|
||||||
<string>Viewer</string>
|
<string>Viewer</string>
|
||||||
<key>CFBundleURLName</key>
|
<key>CFBundleURLName</key>
|
||||||
<string>net.buzzert.rosslerattix</string>
|
<string>net.buzzert.attractor</string>
|
||||||
<key>CFBundleURLSchemes</key>
|
<key>CFBundleURLSchemes</key>
|
||||||
<array>
|
<array>
|
||||||
<string>http</string>
|
<string>http</string>
|
||||||
|
|||||||
@@ -113,6 +113,9 @@
|
|||||||
|
|
||||||
// Instantiate web view
|
// Instantiate web view
|
||||||
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:webViewConfiguration];
|
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:webViewConfiguration];
|
||||||
|
if ([webView respondsToSelector:@selector(_setFindInteractionEnabled:)]) {
|
||||||
|
webView._findInteractionEnabled = YES;
|
||||||
|
}
|
||||||
|
|
||||||
// Configure proxy interface (interface to remote web process)
|
// Configure proxy interface (interface to remote web process)
|
||||||
_webProcessProxy = [[webView _remoteObjectRegistry] remoteObjectProxyWithInterface:[self _webProcessProxyInterface]];
|
_webProcessProxy = [[webView _remoteObjectRegistry] remoteObjectProxyWithInterface:[self _webProcessProxyInterface]];
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
1AD3103F252545BF00A4A952 /* FindOnPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindOnPageView.swift; sourceTree = "<group>"; };
|
1AD3103F252545BF00A4A952 /* FindOnPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindOnPageView.swift; sourceTree = "<group>"; };
|
||||||
1AD3104225254FB900A4A952 /* FindOnPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindOnPageViewController.swift; sourceTree = "<group>"; };
|
1AD3104225254FB900A4A952 /* FindOnPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindOnPageViewController.swift; sourceTree = "<group>"; };
|
||||||
1AD310442525586B00A4A952 /* DocumentControlItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentControlItemView.swift; sourceTree = "<group>"; };
|
1AD310442525586B00A4A952 /* DocumentControlItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentControlItemView.swift; sourceTree = "<group>"; };
|
||||||
1ADFF45C24C7DE53006DC7AE /* rossler attix.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "rossler attix.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
1ADFF45C24C7DE53006DC7AE /* Attractor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Attractor.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
1ADFF45F24C7DE53006DC7AE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
1ADFF45F24C7DE53006DC7AE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
1ADFF46124C7DE53006DC7AE /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
1ADFF46124C7DE53006DC7AE /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||||
1ADFF46824C7DE54006DC7AE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
1ADFF46824C7DE54006DC7AE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
@@ -269,7 +269,7 @@
|
|||||||
1ADFF45D24C7DE53006DC7AE /* Products */ = {
|
1ADFF45D24C7DE53006DC7AE /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
1ADFF45C24C7DE53006DC7AE /* rossler attix.app */,
|
1ADFF45C24C7DE53006DC7AE /* Attractor.app */,
|
||||||
1ADFF48124C8C12F006DC7AE /* SBrowserProcessBundle.bundle */,
|
1ADFF48124C8C12F006DC7AE /* SBrowserProcessBundle.bundle */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
@@ -486,7 +486,7 @@
|
|||||||
);
|
);
|
||||||
name = App;
|
name = App;
|
||||||
productName = SBrowser;
|
productName = SBrowser;
|
||||||
productReference = 1ADFF45C24C7DE53006DC7AE /* rossler attix.app */;
|
productReference = 1ADFF45C24C7DE53006DC7AE /* Attractor.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
};
|
};
|
||||||
1ADFF48024C8C12F006DC7AE /* SBrowserProcessBundle */ = {
|
1ADFF48024C8C12F006DC7AE /* SBrowserProcessBundle */ = {
|
||||||
@@ -792,7 +792,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = "App/Supporting Files/SBrowser.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "App/Supporting Files/SBrowser.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "-";
|
CODE_SIGN_IDENTITY = "-";
|
||||||
CODE_SIGN_STYLE = Manual;
|
CODE_SIGN_STYLE = Manual;
|
||||||
CURRENT_PROJECT_VERSION = 3;
|
CURRENT_PROJECT_VERSION = 4;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = DQQH5H6GBD;
|
DEVELOPMENT_TEAM = DQQH5H6GBD;
|
||||||
INFOPLIST_FILE = "App/Supporting Files/Info.plist";
|
INFOPLIST_FILE = "App/Supporting Files/Info.plist";
|
||||||
@@ -800,9 +800,9 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 3.0;
|
MARKETING_VERSION = 4.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.buzzert.rosslerattix;
|
PRODUCT_BUNDLE_IDENTIFIER = net.buzzert.attractor;
|
||||||
PRODUCT_NAME = "rossler attix";
|
PRODUCT_NAME = Attractor;
|
||||||
SUPPORTS_MACCATALYST = YES;
|
SUPPORTS_MACCATALYST = YES;
|
||||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "App/Supporting Files/SBrowser-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "App/Supporting Files/SBrowser-Bridging-Header.h";
|
||||||
@@ -821,7 +821,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = "App/Supporting Files/SBrowser.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "App/Supporting Files/SBrowser.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "-";
|
CODE_SIGN_IDENTITY = "-";
|
||||||
CODE_SIGN_STYLE = Manual;
|
CODE_SIGN_STYLE = Manual;
|
||||||
CURRENT_PROJECT_VERSION = 3;
|
CURRENT_PROJECT_VERSION = 4;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = DQQH5H6GBD;
|
DEVELOPMENT_TEAM = DQQH5H6GBD;
|
||||||
INFOPLIST_FILE = "App/Supporting Files/Info.plist";
|
INFOPLIST_FILE = "App/Supporting Files/Info.plist";
|
||||||
@@ -829,9 +829,9 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 3.0;
|
MARKETING_VERSION = 4.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.buzzert.rosslerattix;
|
PRODUCT_BUNDLE_IDENTIFIER = net.buzzert.attractor;
|
||||||
PRODUCT_NAME = "rossler attix";
|
PRODUCT_NAME = Attractor;
|
||||||
SUPPORTS_MACCATALYST = YES;
|
SUPPORTS_MACCATALYST = YES;
|
||||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "App/Supporting Files/SBrowser-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "App/Supporting Files/SBrowser-Bridging-Header.h";
|
||||||
|
|||||||
Reference in New Issue
Block a user