С Electron, есть ли способ отличить пользовательское нажатие на элемент меню и использование сочетания клавиш? - PullRequest
1 голос
/ 07 июня 2019

В Electron, есть ли способ отличить пользователя, нажимающего на элемент меню, и использование сочетания клавиш?

Я знаю, что ожидаемое поведение для обоих в целом одинаково, но я бы хотелотдельно отслеживать использование ярлыков и нажатий в меню.

1 Ответ

0 голосов
/ 09 июня 2019

К сожалению, вы не можете сделать это напрямую. Параметр event обработчика MenuItem click не имеет свойства, которое указывает, было ли действие вызвано с помощью мыши или клавиатуры.

Обход

Однако вы можете, конечно, использовать обходной путь, используя тот факт, что если функция меню запускается с помощью сочетания клавиш, нажатие клавиши (клавиш) может быть одновременно зафиксировано в процессе рендерера с использованием keydown событие.

В простейшем виде вы можете отслеживать все вызовы в функции меню, т.е. независимо от того, были ли они вызваны с помощью мыши или клавиатуры. Параллельно вы слушаете те же ярлыки в вашем рендерере. Каждый раз, когда обнаруживается ярлык, который также является ускорителем в вашем меню, вы делаете это на заметку.

Пример

Если предположить сценарий, в котором вы используете мышь, чтобы щелкнуть действие, затем использовать ярлык, а затем снова мышь, отслеживаемые события будут:

#  time  event
1   t0   Menu item action               (Using mouse)
2   t1   Menu item action               (Using keyboard shortcut)
3  ~t1   Keyboard shortcut detected
4   t2   Menu item action               (Using mouse)

Если у вас есть такие данные, вы можете посчитать количество появлений «Действие пункта меню» (здесь 3) и «Обнаружено сочетание клавиш» (здесь 1). Затем вы знаете, что 1 из 3 раз действие меню вызывалось с помощью сочетания клавиш.

Downsides

Недостатки этого обходного пути:

  • Дублированный код для ускорителей меню и ключевого слушателя
  • Генерация двух событий при использовании клавиатуры

Можно подумать о возможных способах устранения этих недостатков, в зависимости от вашего конкретного случая использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...