sindresorhus / KeyboardShortcuts

⌨️ Add user-customizable global keyboard shortcuts (hotkeys) to your macOS app in minutes
https://swiftpackageindex.com/sindresorhus/KeyboardShortcuts/documentation/keyboardshortcuts/keyboardshortcuts
MIT License
1.94k stars 181 forks source link

the KeyboardShortcut Recorder still gets the focus by default in certain cases #145

Closed godbout closed 1 year ago

godbout commented 1 year ago

this doesn't happen when you first show your Settings dialog, but it happens at a later stage, if you start fingering the Recorder. this can be easily seen in the latest version of Plash. that will cause the issue reported in #144. see below:

https://github.com/sindresorhus/KeyboardShortcuts/assets/121373/71ef4e95-64af-4bf6-b489-b5af35fc6af9

godbout commented 1 year ago

🙏️

godbout commented 1 year ago

@sindresorhus still getting the issue for that one. (the closing the Settings window issue is fixed.) anything i can do to help troubleshoot?

sindresorhus commented 1 year ago

I'm unable to reproduce this with the latest version together with Plash. Are you able to reproduce in Plash?

If it's only reproducible in your app, can you try replacing https://github.com/sindresorhus/KeyboardShortcuts/commit/b878f8132be59576fc87e39405b1914eff9f55d3#diff-41fc3abd80062ae3c8634038c89a3495bcd1d2455c1ff5cd5aa022f3409c6d8dR146-R149 with:

if #available(macOS 13, *) {
    Task {
        try? await Task.sleep(for: .seconds(0.5))
        canBecomeKey = true
    }
}
godbout commented 1 year ago

will do in a couple of hours. will try the latest version of Plash, my apps, the replacement you propose, and may create a bare repo showing the issue if necessary. thanks.

godbout commented 1 year ago
  1. i'm unable to reproduce on Plash either, it seems
  2. i've replace the code in RecorderCocoa by the snippet above, same thing, doesn't work in my apps
  3. if i just make canBecomeKey = false then everything works fine 😂️ (but haven't had dug yet about side effects

so i guess it's something in my apps. will dig. and will try to make a project from scratch and see. also i'm on macOS 14, latest public beta if that matters. will work on latest macOS 13 tomorrow. also Plash is all good under macOS 14 so probably not the issue.

godbout commented 1 year ago

dumping what i'm finding: if i show my Settings window from launching the app again, or through pressing command , on my input-à-la-Alfred, then the KeyboardShortcut doesn't take focus. but if i do through the status menu item it does. they all call the same static func of a class. so not sure what's going on 😂️

godbout commented 1 year ago

i made a project from scratch with bare minimum code and the issue doesn't show up. so it has to be on my side. i'll try to figure out why, and i'll update here for reference. but as far as you're concerned, all is good on your side. thanks again Sindre!

godbout commented 1 year ago

found it. it's coming from that func in my AppDelegates:

func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
    NSApp.hide(self)

    return false
}

for whatever reason this causes the issue with the KeyboardShortcuts Recorder. will see what i can do now from my side.

P.S.: this code is so that when closing the Settings of my apps, the focus goes back to the previous app rather than being in the limbo.