Skip to content

Commit

Permalink
[IMP] Get rid of legacy, deprecated objc-c code
Browse files Browse the repository at this point in the history
  • Loading branch information
Pyroh committed Jan 8, 2020
1 parent 16d7044 commit 3c2e396
Show file tree
Hide file tree
Showing 8 changed files with 109 additions and 208 deletions.
54 changes: 21 additions & 33 deletions Fluor/Controllers/BehaviorController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//

import Cocoa
import os.log

class BehaviorController: NSObject, BehaviorDidChangeObserver, DefaultModeViewControllerDelegate, SwitchMethodDidChangeObserver {
@IBOutlet var currentAppViewController: CurrentAppViewController!
Expand All @@ -20,8 +21,8 @@ class BehaviorController: NSObject, BehaviorDidChangeObserver, DefaultModeViewCo
private var shouldHandleFNKey: Bool = false
private var fnKeyMaximumDelay: Double = BehaviorManager.default.fnKeyMaximumDelay

private var currentMode: KeyboardMode = .error
private var onLaunchKeyboardMode: KeyboardMode = .error
private var currentMode: FKeyMode = .apple
private var onLaunchKeyboardMode: FKeyMode = .apple
private var currentID: String = ""
private var currentBehavior: AppBehavior = .inferred
private var switchMethod: SwitchMethod = .window
Expand Down Expand Up @@ -68,30 +69,21 @@ class BehaviorController: NSObject, BehaviorDidChangeObserver, DefaultModeViewCo
if enabled {
adaptModeForApp(withId: currentID)
} else {
switch onLaunchKeyboardMode {
case .apple:
setFnKeysToAppleMode()
default:
setFnKeysToOtherMode()
}
guard FKeyManager.setCurrentFKeyMode(onLaunchKeyboardMode) == .success(onLaunchKeyboardMode) else { fatalError() }
currentMode = onLaunchKeyboardMode
}
}

func performTerminationCleaning() {
if BehaviorManager.default.shouldRestoreStateOnQuit {
let state: KeyboardMode
let state: FKeyMode
if BehaviorManager.default.shouldRestorePreviousState {
state = onLaunchKeyboardMode
} else {
state = BehaviorManager.default.onQuitState
}
switch state {
case .apple:
setFnKeysToAppleMode()
default:
setFnKeysToOtherMode()
}

guard FKeyManager.setCurrentFKeyMode(state) == .success(state) else { fatalError() }
}
}

Expand Down Expand Up @@ -140,12 +132,12 @@ class BehaviorController: NSObject, BehaviorDidChangeObserver, DefaultModeViewCo
adaptModeForApp(withId: self.currentID)
case .key:
stopObservingBehaviorDidChange()
currentMode = BehaviorManager.default.defaultKeyboardMode
currentMode = BehaviorManager.default.defaultFKeyMode
changeKeyboard(mode: currentMode)
}
}

func defaultModeController(_ controller: DefaultModeViewController, didChangeModeTo mode: KeyboardMode) {
func defaultModeController(_ controller: DefaultModeViewController, didChangeModeTo mode: FKeyMode) {
switch self.switchMethod {
case .window:
self.adaptModeForApp(withId: self.currentID)
Expand All @@ -159,11 +151,8 @@ class BehaviorController: NSObject, BehaviorDidChangeObserver, DefaultModeViewCo
///
/// - Parameter notification: The notification.
@objc private func appMustSleep(notification: Notification) {
switch onLaunchKeyboardMode {
case .apple:
setFnKeysToAppleMode()
default:
setFnKeysToOtherMode()
if FKeyManager.setCurrentFKeyMode(self.onLaunchKeyboardMode) != .success(self.onLaunchKeyboardMode) {
os_log("Unable to reset FKey mode to pre-launch mode", type: .error)
}
self.resignAsObserver()
}
Expand Down Expand Up @@ -206,18 +195,18 @@ class BehaviorController: NSObject, BehaviorDidChangeObserver, DefaultModeViewCo
self.changeKeyboard(mode: mode)
}

private func changeKeyboard(mode: KeyboardMode) {
private func changeKeyboard(mode: FKeyMode) {
guard FKeyManager.setCurrentFKeyMode(mode) == .success(mode) else {
fatalError()
}

switch mode {
case .apple:
NSLog("Switch to Apple Mode for %@", currentID)
statusMenuController.statusItem.image = BehaviorManager.default.useLightIcon ? #imageLiteral(resourceName: "AppleMode") : #imageLiteral(resourceName: "IconAppleMode")
setFnKeysToAppleMode()
os_log("Switch to Apple Mode for %@", self.currentID)
self.statusMenuController.statusItem.image = BehaviorManager.default.useLightIcon ? #imageLiteral(resourceName: "AppleMode") : #imageLiteral(resourceName: "IconAppleMode")
case .other:
NSLog("Switch to Other Mode for %@", currentID)
statusMenuController.statusItem.image = BehaviorManager.default.useLightIcon ? #imageLiteral(resourceName: "OtherMode") : #imageLiteral(resourceName: "IconOtherMode")
setFnKeysToOtherMode()
default:
return
NSLog("Switch to Other Mode for %@", self.currentID)
self.statusMenuController.statusItem.image = BehaviorManager.default.useLightIcon ? #imageLiteral(resourceName: "OtherMode") : #imageLiteral(resourceName: "IconOtherMode")
}
}

Expand All @@ -235,7 +224,6 @@ class BehaviorController: NSObject, BehaviorDidChangeObserver, DefaultModeViewCo
} else {
if self.shouldHandleFNKey, let timestamp = self.fnDownTimestamp {
let delta = (event.timestamp - timestamp) * 1000
// print("\(delta)ms")
self.shouldHandleFNKey = false
if event.keyCode == 63, delta <= self.fnKeyMaximumDelay {
self.fnKeyPressed()
Expand All @@ -250,7 +238,7 @@ class BehaviorController: NSObject, BehaviorDidChangeObserver, DefaultModeViewCo

private func fnKeyPressed() {
let mode = currentMode.counterPart()
BehaviorManager.default.defaultKeyboardMode = mode
BehaviorManager.default.defaultFKeyMode = mode
changeKeyboard(mode: mode)
currentMode = mode
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import Cocoa

@objc protocol DefaultModeViewControllerDelegate: class {
@objc optional func defaultModeController(_ controller: DefaultModeViewController, willChangeModeTo mode: KeyboardMode)
func defaultModeController(_ controller: DefaultModeViewController, didChangeModeTo mode: KeyboardMode)
@objc optional func defaultModeController(_ controller: DefaultModeViewController, willChangeModeTo mode: FKeyMode)
func defaultModeController(_ controller: DefaultModeViewController, didChangeModeTo mode: FKeyMode)
}

class DefaultModeViewController: NSViewController {
Expand All @@ -20,7 +20,7 @@ class DefaultModeViewController: NSViewController {
///
/// - parameter sender: The object that sent the action.
@IBAction func changeMode(_ sender: NSSegmentedControl) {
guard let state = KeyboardMode(rawValue: sender.selectedSegment) else { return }
guard let state = FKeyMode(rawValue: sender.selectedSegment) else { return }
delegate?.defaultModeController?(self, willChangeModeTo: state)
delegate?.defaultModeController(self, didChangeModeTo: state)
}
Expand Down
1 change: 0 additions & 1 deletion Fluor/Fluor-Bridging-Header.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,5 @@
// Use this file to import your target's public headers that you would like to expose to Swift.
//

#include "utils.h"
#include "LaunchAtLoginController.h"
#include "PFMoveApplication.h"
75 changes: 75 additions & 0 deletions Fluor/Misc/FKeyManager.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
//
// FKeyManager.swift
// Fluor
//
//

enum FKeyManager {
typealias FKeyManagerResult = Result<FKeyMode, FKeyManagerError>

enum FKeyManagerError: Error {
case cannotCreateMasterPort
case cannotOpenService
case cannotSetParameter
case cannotGetParameter

case otherError
}

private static func getIORegistry() throws -> io_registry_entry_t {
var masterPort: mach_port_t = .zero
guard IOMasterPort(bootstrap_port, &masterPort) == KERN_SUCCESS else { throw FKeyManagerError.cannotCreateMasterPort }

return IORegistryEntryFromPath(masterPort, "IOService:/IOResources/IOHIDSystem")
}

private static func getIOHandle() throws -> io_service_t {
try self.getIORegistry() as io_service_t
}

private static func getServiceConnect() throws -> io_connect_t {
var service: io_connect_t = .zero
let handle = try self.getIOHandle()
defer { IOObjectRelease(handle) }

guard IOServiceOpen(handle, mach_task_self_, UInt32(kIOHIDParamConnectType), &service) == KERN_SUCCESS else {
throw FKeyManagerError.cannotOpenService
}

return service
}

static func setCurrentFKeyMode(_ mode: FKeyMode) -> FKeyManagerResult {
do {
let connect = try FKeyManager.getServiceConnect()
let value = mode.rawValue as CFNumber

guard IOHIDSetCFTypeParameter(connect, kIOHIDFKeyModeKey as CFString, value) == KERN_SUCCESS else {
throw FKeyManagerError.cannotSetParameter
}

IOServiceClose(connect)
return .success(mode)
} catch let error as FKeyManagerError {
return .failure(error)
} catch {
return .failure(.otherError)
}
}

static func getCurrentFKeyMode() -> FKeyManagerResult {
do {
let ri = try self.getIORegistry()
defer { IOObjectRelease(ri) }

guard let entry = IORegistryEntryCreateCFProperty(ri, "HIDParameters" as CFString, kCFAllocatorDefault, 0), let dict = entry.takeUnretainedValue() as? NSDictionary, let mode = dict.value(forKey: "HIDFKeyMode") as? Int, let currentMode = FKeyMode(rawValue: mode) else {
throw FKeyManagerError.cannotGetParameter
}
return .success(currentMode)
} catch let error as FKeyManagerError {
return .failure(error)
} catch {
return .failure(.otherError)
}
}
}
49 changes: 0 additions & 49 deletions Fluor/Misc/utils.h

This file was deleted.

118 changes: 0 additions & 118 deletions Fluor/Misc/utils.m

This file was deleted.

Loading

0 comments on commit 3c2e396

Please sign in to comment.