solid-primitives icon indicating copy to clipboard operation
solid-primitives copied to clipboard

[keyboard] shortcuts trigger default actions second time

Open Ehesp opened this issue 2 years ago • 3 comments

Hey,

When I setup the following shortcut (on Mac):

createShortcut(['Meta', 'P'], () => {
    console.log('Pressed Meta + P');
});

Pressing this combo works fine, however if I fully let go, and press it again the native browser "Print" dialog will popup. I close it, press the combo again and it works fine, press again and the dialog opens (and so on...).

I've tried with requireReset on both true and false but the behaviour is the same.

This behaviour is the same on "Meta + S" too.

Ehesp avatar Dec 08 '22 15:12 Ehesp

This is interesting. Preventing the default behavior for Control + P on Windows works as expected, but for Meta + P the native behavior is executed anyway. Not sure if events associated with Meta key cannot be prevented or what's the issue. Needs more investigating.

thetarnav avatar Dec 08 '22 16:12 thetarnav

So for a bit more context, my current (slimmed) logic looks like this:

const isMac = navigator.platform.toLowerCase().indexOf('mac') > -1;

window.addEventListener('keydown', shortcut);

function shortcut(event: KeyboardEvent): void {
    if (isMac && e.metaKey && e.key === 'p') {
      event.preventDefault();
      // do something
    }
}

I can mash Cmd + P as much as I want and the print dialog doesn't show (this is in use here: https://zapp.run/edit/dart) - it'll trigger the command palette. I implemented the logic above to trigger the palette but yeah, it worked but then showed the print dialog the second time, so it should be possible to prevent it.

Ehesp avatar Dec 08 '22 16:12 Ehesp

Any progress so far?

sotasan avatar Apr 10 '24 07:04 sotasan